索引的使用,联合索引的使用,是否索引越多越好?
[以oracle为例]索引好比是一本书前面的目录,能加快数据库表的查询速度。索引分为聚簇索引和非聚簇索引两种,聚簇索引 是按照数据存放的物理位置为顺序的,而非聚簇索引就不一样了;聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的检索很快。
索引的优点
正确的索引会大大提高数据查询,对结果进行排序、分组的操作效率。
索引的缺点
- 创建索引需要额外的磁盘空间,索引最大一般为表大小的1.2倍左右。
- 在表数据修改时,例如增加,删除,更新,都需要维护索引表,这是需要系统开销的。
- 不合理的索引设计非但不能利于系统,反而会使系统性能下降。例如我们在一个创建有非聚集索引的列上做范围查询,此列的索引不会起到任何的优化效果,反而由于数据的修改而需要维护索引表,从而影响了对数据修改的性能。
什么字段不适合创建索引?
- 不经常使用的列,这种索引带来缺点远大于带来的优点。
- 逻辑性的字段,例如性别字段等等,匹配的记录太多,和全表扫描比起来差不多。
- 字段内容特别大的字段,例如大字段等,这会大大增大索引所占用的空间以及索引维护时的速度。
- 涉及到计算的列,或者是需要利用数据库函数进行加工处理的列不应当创建索引。
联合索引
- 查询条件中出现联合索引第一列,或者全部,则能利用联合索引.
- 条件列中只要条件相连在一起,无论前后,都会利用上联合索引.
- 查询条件中没有出现联合索引的第一列,而出现联合索引的第二列,或者第三列,都不会利用联合索引查询.
单一列索引
只要条件列中出现索引列,无论在什么位置,都能利用索引查询.另外,实际使用过程中,经常遇到索引丢失的情况,这种情况一般需要重建索引,有的涉及到复杂业务查询的语句,需要优化查询,对于具体的SQL,可能由于优化的原因,有不是理想的执行计划。