索引技术[数据库]

  在创建索引时要做到三个适当,即在适当的表上、适当的列上创建适当数量的索引。

  聚集索引和非聚集索引的根本区别是数据记录的排列顺序和索引的排列顺序是否一致。

  聚集索引表记录的排列顺序与索引的排列顺序一致,优点是查询速度快,对于返回某一范围的数据效果最好,缺点是对表进行修改速度较慢。

  非聚集索引指定了表中记录的逻辑顺序,数据记录的物理顺序和索引的顺序不一致,在有大量不同数据的列上建立非聚集索引,可以提高数据的查询和修改速度。

以上来源:数据库索引技术--聚集索引和非聚集的区别和建立原则(三)

  对索引中的所有列执行搜索或仅对前几列执行搜索时,复合索引非常有用;仅对后面的任意列执行搜索时,复合索引则没有用处。

  包含多个列的主键始终会自动以复合索引的形式创建索引,其列的顺序是它们在表定义中出现的顺序,而不是在主键定义中指定的顺序。

  复合索引只对和索引中排序相同或相反的order by 语句优化。

  查询优化器在在where查询中的作用:

    1. 如果一个多列索引存在于 列 Col1 和 Col2 上,查询优化器会试图通过决定哪个索引将找到更少的行。之后用得到的索引去取值。

    2. 如果存在一个多列索引,任何最左面的索引前缀能被优化器使用。所以联合索引的顺序不同,影响索引的选择,尽量将值少的放在前面。       如:一个多列索引为 (col1 ,col2, col3)那么在索引在列 (col1) 、(col1 col2) 、(col1 col2 col3) 的搜索会有作用。

    3. 如果列不构成索引的最左面前缀,则建立的索引将不起作用。

    4. 如果一个 Like 语句的查询条件不以通配符起始则使用索引。       如:%车 或 %车%   不使用索引。            车%              使用索引。

索引限制问题
        问题           应对
使用不等于操作符(<>, !=) 通过把用 or 语法替代不等号进行查询
使用 is null 或 is not null 建表时把需要索引的列定义为非空(not null)
索引列使用函数 把函数应用在条件上
比较不匹配的数据类型 条件中确定数据类型

  

 

 

  

  

  索引的缺点:

    1. 占用磁盘空间。

    2. 增加了插入和删除的操作时间。一个表拥有的索引越多,插入和删除的速度越慢。如 要求快速录入的系统不宜建过多索引。

以上来源:数据库索引技术--复合索引介绍(四)

原文地址:https://www.cnblogs.com/walden1024/p/4535176.html