后端|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索引使用
    文章图片
  • 解释:
    • 我们只需要注意一个最重要的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索引使用
      文章图片
    • 索引类型:
      • Fulltext 全文本搜索索引:用于搜索长篇文章。
      • Unique 唯一索引:
        • 主键索引:primary key :加速查找+约束(不为空且唯一)
        • 唯一索引:unique:加速查找+约束 (唯一)
      • 联合索引
        • -primary key(id,name):联合主键索引
        • -unique(id,name):联合唯一索引
        • -index(id,name):联合普通索引
      • Normal
        • 普通索引:加快搜索。
      • Spatial
        • 空间索引。
    • 后端|mysql索引使用
      文章图片
    • 索引方法:
      • #我们可以在创建上述索引的时候,为其指定索引类型,分两类 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
    • 【后端|mysql索引使用】例: select * from 表名 force index (强制索引的名字)



    推荐阅读