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