9.索引

作者: LucXion | 来源:发表于2023-05-06 01:40 被阅读0次

给where子句中的字段建立索引,可以提升检索数据的效率,但相对的会牺牲写操作的性能。使用索引时要平衡好索引的利与弊。

功能的角度 分析,索引的种类有四种:普通索引,唯一索引,主键索引,全文索引。其中普通索引、唯一索引、主键索引间的区别只在于唯一性约束的不同。

物理实现上来说,索引只有两种,聚集索引、非聚集索引。聚集索引和非聚集索引的区别就像数组和链表。每张表只有一个聚集索引,就是主键索引,表中的数据根据聚集索引来排序,聚集索引的叶子节点存储的就是数据本身;而非聚集索引存储的是数据位置,如果需要查询数据,还要进一步进行查找。
所以说,检索速度,聚集索引 > 非聚集索引。同时,数据写入的速度,非聚集索引 > 聚集索引。这种特性和数组、链表相同。

我们可以简单的通过以下两个条件来判断是否需要索引:
  1. 数据量不大,低于1000条时,不需要索引。
  2. 建立索引的字段在表中重复值超过百分之10。比如保存了100万行个人信息的表,男女比例各占百分之50,那么就不需要对性别这个字段建立索引。一旦创建了索引,你需要先访问 50 万次索引,然后再访问 50 万次数据表,这样加起来的开销比不使用索引可能还要大。

联合索引最左原则:

// 创建联合索引
CREATE INDEX index_name ON table_name (id, name);
// 联合索引生效
SELECT id, name FROM table_name WHERE id = 900001 AND name = 'student_890001'
// 只对联合索引最左的字段进行查询,联合索引生效
SELECT id, name FROM table_name WHERE id = 900001 
// 只对联合索引非最左的字段进行查询,联合索引不生效
SELECT id, name FROM table_name WHERE name = 'student_890001' 

相关文章

网友评论

      本文标题:9.索引

      本文链接:https://www.haomeiwen.com/subject/ifyxsdtx.html