mysql索引使用

  • 查看是否走了索引:  使用解释函数explain,只需添加在sql语句之前即可:
    • explain select ID, TRADEDATE, NAVDATE, FUNDCODE, NAV, ACCUMULATIVENAV, TOTALDIVIDENT, FUNDINCOME, YIELD, FUNDYEARINCOMERATE, FUNDDAYINCOME, ANNOUNCEFLAG, MODIFYTIME, DAYINC from product_fundnav WHERE FUNDCODE = '110022' order by navDate desc limit 10,10;
      
    • 示例:
  • mysql索引使用_第1张图片
  • 解释:
    • 我们只需要注意一个最重要的type 的信息很明显的提现是否用到索引:
    • system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
    • 一般来说,得保证查询至少达到range级别,最好能达到ref,否则就可能会出现性能问题。
    • table:显示这一行的数据是关于哪张表的
    • possible_keys:显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从WHERE语句中选择一个合适的语句
    • key: 实际使用的索引。如果为NULL,则没有使用索引。很少的情况下,MYSQL会选择优化不足的索引。这种情况下,可以在SELECT语句中使用USE INDEX(indexname)来强制使用一个索引或者用IGNORE INDEX(indexname)来强制MYSQL忽略索引
    • key_len:使用的索引的长度。在不损失精确性的情况下,长度越短越好
    • ref:显示索引的哪一列被使用了,如果可能的话,是一个常数
    • rows: 显示MySQL认为它执行查询时必须检查的行数.
    • extra列返回的描述的意义

 

  • 设置索引->设计表
    • mysql索引使用_第2张图片
    • 索引类型:
      •  Fulltext 全文本搜索索引:用于搜索长篇文章。
      •  Unique 唯一索引:  
        • 主键索引:primary key :加速查找+约束(不为空且唯一)
        • 唯一索引:unique:加速查找+约束 (唯一)
      • 联合索引
        • -primary key(id,name):联合主键索引
        • -unique(id,name):联合唯一索引
        • -index(id,name):联合普通索引
      • Normal 
        •  普通索引:加快搜索。
      • Spatial 
        • 空间索引。
    • mysql索引使用_第3张图片
    • 索引方法:
      • #我们可以在创建上述索引的时候,为其指定索引类型,分两类
        hash类型的索引:查询单条快,范围查询慢
        btree类型的索引:b+树,层数越多,数据量指数级增长(我们就用它,因为innodb默认支持它)
         
        #不同的存储引擎支持的索引类型也不一样
        InnoDB 支持事务,支持行级别锁定,支持 B-tree、Full-text 等索引,不支持 Hash 索引;
        MyISAM 不支持事务,支持表级别锁定,支持 B-tree、Full-text 等索引,不支持 Hash 索引;
        Memory 不支持事务,支持表级别锁定,支持 B-tree、Hash 等索引,不支持 Full-text 索引;
        NDB 支持事务,支持行级别锁定,支持 Hash 索引,不支持 B-tree、Full-text 等索引;
        Archive 不支持事务,支持表级别锁定,不支持 B-tree、Hash、Full-text 等索引;

         

      • 注意:
        A:索引方法 btree  可以用于“ >、 <  、=”查询 ,如果查id=1000的数据 建立索引后 二分查找最多13次就可以查出相应的数据;

        B:hash 不能做order by排序 不能做 用like模糊查询。

  • 强制走某一个索引. 使用关键字force index

    • 例: select * from 表名 force index (强制索引的名字)

 

 

 

你可能感兴趣的:(后端,mysql)