zoukankan      html  css  js  c++  java
  • 五、MYSQL的索引

    对于建立的索引(姓,名字,data)

    5.1、索引对一下的查询类型有效

      1、全值匹配:能查找姓+名为ALLEN、出生日期为1990-11-05的人;

      2、最左前缀匹配:可以查找姓为ALLEN的人;即只使用索引的第一列;

      3、列前缀匹配:可以查找姓为J开头的人;这里索引也只使用了第一列;

      4、范围匹配:可以查找姓以开头为A-J的人;这里索引也只使用了第一列;

      5、精确匹配前一列,范围匹配后一列;

      6、只访问索引的查询;

      7、ORDER BY 也满足索引;

    5.2、索引的限制

      1、没法找到特定名字的人;

      2、没法找到以某个J结尾的姓;

      3、没法跳过索引,即没有姓A,出生日期为XX的人;

      4、范围查询的右边索引失效,例如姓为AX,名字like b% ,出生日期为199-01-01的人,只使用了前两列索引;

    5.3 高性能索引策略

      1、独立的列,以下SQL失效:selext * from user where id +1 = 10;

      2、选择合适的索引列,

      3、聚族索引与非聚族索引(innoDB和myisam引擎的区别)

      尽量使用自增主键而不是uuid,因为这样会导致数据没有了聚集属性;

      4、索引覆盖-如果查询条件中已经包含了要查询的值,那么对于聚族索引而言,就不需要进行二次回查;

        例如table 有 (id,name)的联合索引,当sql=select id ,name from table 时,就会触发索引覆盖;

      5、多表JOIN时,只有第一个表的ordery by条件能使用索引;

      关于order by 的生效和失效条件

      对于table有联合唯一索引(a,b,c)

    以下索引生效:

      where a= x order by b;能使用索引,因为a是常量,而a+b组成的最左前缀索引;

      where a >x order by a,b;能使用索引,因为a+b组成了联合索引;

    以下索引失效:

      where a = x order by b desc,c desc ,因为两个不同的排序方向,但是索引列都是正序排序;

      where a =x order by b ,d 使用了一个不在索引中的列;

      where a =x ordery c ,a+c没法组合最左前缀组合;

      where a > x order by  b,c ;失效,a使用了范围查询条件,b,c组合失效;

       6、使用In sex来不选择性别,让范围查询的字段(例如age)排到最后;

      

        

  • 相关阅读:
    好久没有写博客了
    老师网站 回顾及复习 https://www.linuxprobe.com/ (linux就该这么学 电子版)
    这周要考试了,还没有时间干其它的了,
    linux学习第十九天 (Linux就该这么学) 结课了
    linux学习第十八天 (Linux就该这么学)
    linux学习第十七天 (Linux就该这么学)
    Spanner's Correctness Constraints on Transactions
    Linearizability
    HDFS vs GFS
    Raft
  • 原文地址:https://www.cnblogs.com/yeyongjian/p/9415325.html
Copyright © 2011-2022 走看看