SQL 优化总结(二) 索引
2013-09-24 00:01
211 查看
索引
1、索引的建立
缺省情况下建立的索引是非群集索引,但有时它并不是最佳的;合理的索引设计要建立在对各种查询的分析和预测上。
一般来说:
(1) 有大量重复值、且经常有范围查询(between, >,<,>=,<=) 和order by、group by发生的列,可考虑建立群集索引;
在群集索引下,数据在物理上按顺序在数据页上,重复值也排列在一起,因而在范围查找时,可以先找到这个范围的起末点,且只在这个范围内扫描数据页,避免了大范围扫描,提高了查询速度。
(2) 经常同时存取多列,且每列都含有重复值可考虑建立组合索引;
(3) 组合索引要尽量使关键查询形成索引覆盖,其前导列一定是使用最频繁的列。
它将date作为前导列,使每个SQL都可以利用索引,并且在第一和第三个SQL中形成了索引覆盖,因而性能达到了最优。
(4) 在经常进行连接,但是没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引。
(5) 在频繁进行排序或分组(即进行group by或order by操作) 的列上建立索引。
(6) 在条件表达式中经常用到的不同值较多的列上建立检索,在不同值少的列上不要建立索引。比如在雇员表的“性别”列上只有“男”与“女”两个不同值,因此就无必要建立索引。如果建立索引不但不会提高查询效率,反而会严重降低更新速度。
(7) 如果待排序的列有多个,可以在这些列上建立复合索引(compound index) 。
(8) 根据查询条件,建立索引,优化索引、优化访问方式。
2、索引应该尽量小,使用字节数小的列建索引好(参照索引的创建) ,不要对有限的几个值的字段建单一索引如性别字段 ,索引越小越好。
3、索引不能建得太多和太大。
4、在取值范围比较小的情况下,数字型字段上基本没有建立索引的必要。建立索引还可能会增加表的负担,查询速度甚至会减慢。
5、在排序过程中,索引的使用非常关键。建议使用聚集索引。
1、索引的建立
缺省情况下建立的索引是非群集索引,但有时它并不是最佳的;合理的索引设计要建立在对各种查询的分析和预测上。
一般来说:
(1) 有大量重复值、且经常有范围查询(between, >,<,>=,<=) 和order by、group by发生的列,可考虑建立群集索引;
索引 | 语句 | 时间 |
date上有个非群集索引 | select count(*) from record where date >'19991201' and date < '19991214'and amount >2000 | (25秒) |
date上的一个群集索引 | select count(*) from record where date > '19991201' and date < '19991214' and amount >2000 | (14秒) |
(2) 经常同时存取多列,且每列都含有重复值可考虑建立组合索引;
(3) 组合索引要尽量使关键查询形成索引覆盖,其前导列一定是使用最频繁的列。
索引 | 语句 | 时间 |
place,date,amount组合索引 | select count(*) from record where date >'19991201' and date < '19991214' and amount >2000 | (26秒) |
date,place,amount组合索引 | select count(*) from record where date>'19991201' and date < '19991214' and amount >2000 | (< 1秒) |
(4) 在经常进行连接,但是没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引。
(5) 在频繁进行排序或分组(即进行group by或order by操作) 的列上建立索引。
(6) 在条件表达式中经常用到的不同值较多的列上建立检索,在不同值少的列上不要建立索引。比如在雇员表的“性别”列上只有“男”与“女”两个不同值,因此就无必要建立索引。如果建立索引不但不会提高查询效率,反而会严重降低更新速度。
(7) 如果待排序的列有多个,可以在这些列上建立复合索引(compound index) 。
(8) 根据查询条件,建立索引,优化索引、优化访问方式。
2、索引应该尽量小,使用字节数小的列建索引好(参照索引的创建) ,不要对有限的几个值的字段建单一索引如性别字段 ,索引越小越好。
3、索引不能建得太多和太大。
4、在取值范围比较小的情况下,数字型字段上基本没有建立索引的必要。建立索引还可能会增加表的负担,查询速度甚至会减慢。
5、在排序过程中,索引的使用非常关键。建议使用聚集索引。
相关文章推荐
- MS SqlSever一千万条以上记录分页数据库优化经验总结【索引优化 + 代码优化】[转]
- sql中索引优化查询效率的总结
- SQL优化-索引 (四)其他书上没有的索引使用经验总结
- oracle的索引类型及sql优化总结(一)
- 总结mysql不使用索引情况以及如何优化sql语句
- sql优化神器、索引
- ORACLE SQL语句优化总结(一)
- sql语句查询优化总结,建议及写法技巧(汇总)
- 数据库SQL优化大总结之 百万级数据库优化方案
- 应用索引技术优化SQL 语句(Part 3)
- SQL优化大总结
- 基于索引的SQL语句优化之一
- sql性能优化、查询提速总结
- sql查询优化 索引优化
- ORACLE SQL语句优化总结
- 数据库 基于索引的SQL语句优化之降龙十八掌(转)
- MySQL中索引和优化的用法总结
- 数据库SQL优化大总结之 百万级数据库优化方案
- 通过分析SQL语句的执行计划优化SQL(总结)
- 提高mysql千万级大数据SQL查询优化30条经验(Mysql索引优化注意)