【MySQL】基于MySQL的SQL优化(五)——建立索引优化SQL
2016-10-21 12:13
507 查看
选择合适的列建立索引
a:在WHERE从句、GROUP BY从句、ORDER BY从句、ON从句中出现的列。
b:索引的字段越小越好。
c:当表的列非常少,列的字段也非常小时,可以建立覆盖索引优化整个表(覆盖索引:为整个表的所有列建立索引)。
d:建立联合索引时,将离散度大的列放到联合索引的前面。
(
联合索引:
离散度:
通过一个SQL来讲解怎么判断列的离散度。
在一个表中,取要建立索引的两个列,唯一值的多少可以直接作为判断离散度的标准。当一个列的数据唯一值越多,则可选择行越大,离散度也就越高。
)
e:索引不要建立在有频繁写操作(UPDATE、DELETE、INSERT)的列上,频繁的写操作会使得MySQL进行频繁地索引更新。
f:索引并不是越多越好,在MySQL在执行一条SELECT语句的时候会分析哪个索引是最优索引,当索引过多的时候会使得分析的时间变长。
g:不要产生冗余索引,一般的不会用于检索的列不要添加索引。主键本身就是索引,不要在添加联合索引的时候包含主键。
a:在WHERE从句、GROUP BY从句、ORDER BY从句、ON从句中出现的列。
b:索引的字段越小越好。
c:当表的列非常少,列的字段也非常小时,可以建立覆盖索引优化整个表(覆盖索引:为整个表的所有列建立索引)。
d:建立联合索引时,将离散度大的列放到联合索引的前面。
(
联合索引:
CREATE INDEX index_name ON table_name (COL1, COL2, COL3);
离散度:
通过一个SQL来讲解怎么判断列的离散度。
SELECT COUNT(DISTINCT p.customer_id),COUNT(DISTINCT p.staff_id) FROM payment p;
在一个表中,取要建立索引的两个列,唯一值的多少可以直接作为判断离散度的标准。当一个列的数据唯一值越多,则可选择行越大,离散度也就越高。
)
e:索引不要建立在有频繁写操作(UPDATE、DELETE、INSERT)的列上,频繁的写操作会使得MySQL进行频繁地索引更新。
f:索引并不是越多越好,在MySQL在执行一条SELECT语句的时候会分析哪个索引是最优索引,当索引过多的时候会使得分析的时间变长。
g:不要产生冗余索引,一般的不会用于检索的列不要添加索引。主键本身就是索引,不要在添加联合索引的时候包含主键。
相关文章推荐
- mysql查询优化之基于索引的排序
- 基于索引的SQL语句优化之降龙十八掌
- 基于索引的SQL语句优化之降龙十八掌
- MYSQL常用技术及SQL索引-存储优化
- 基于索引的SQL语句优化之降龙十八掌
- 基于索引的SQL语句优化(转帖,声明,本人纯属收藏之用,以备不时之需)
- 基于索引的SQL语句优化
- 基于索引的SQL语句优化和导入导出Oracle表
- 基于索引的SQL语句优化之降龙十八掌
- 基于索引的SQL语句优化之降龙十八掌(转载)!
- SQL 建立索引及优化索引
- 建立索引来优化SQL查询
- 索引的分析和优化(基于MySQL)
- 基于索引的SQL语句优化之降龙十八掌
- sql索引建立,与sql语句优化,sql分页存储过程
- 基于索引的SQL语句优化之降龙十八掌
- 基于索引的SQL语句优化之降龙十八掌
- sql优化、索引的建立和运用以及多表连接建索引的拙劣见解
- mysql 建立索引(sql 建索引)
- 基于索引的SQL语句优化之降龙十八掌