mysql执行计划

  • mysql官网地址: https://dev.mysql.com/doc/refman/5.5/en/explain-output.html
  • 查看是否走了索引:  使用解释函数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;
      
    • 示例:
  • 解释:
    • 我们只需要注意一个最重要的type 的信息很明显的提现是否用到索引:
      • system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
      • 一般来说,得保证查询至少达到range级别,最好能达到ref,否则就可能会出现性能问题。
        • all:全表扫描,一般情况下出现这样的sql语句而且数据量比较大的话那么就需要进行优化。

        • index:全索引扫描这个比all的效率要好,主要有两种情况,一种是当前的查询时覆盖索引,即我们需要的数据在索引中就可以索取,或者是使用了索引进行排序,这样就避免数据的重排序

        • range:表示利用索引查询的时候限制了范围,在指定范围内进行查询,这样避免了index的全索引扫描,适用的操作符: =, <>, >, >=, <, <=, IS NULL, BETWEEN, LIKE, or IN()

        • index_subquery:利用索引来关联子查询,不再扫描全表

        • unique_subquery:该连接类型类似与index_subquery,使用的是唯一索引

        • index_merge:在查询过程中需要多个索引组合使用

        • ref_or_null:对于某个字段即需要关联条件,也需要null值的情况下,查询优化器会选择这种访问方式

        • ref:使用了非唯一性索引进行数据的查找

        • eq_ref :使用唯一性索引进行数据查找

        • const:这个表至多有一个匹配行,

        • system:表只有一行记录(等于系统表),这是const类型的特例,平时不会出现

    • table:显示这一行的数据是关于哪张表的
    • possible_keys:显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从WHERE语句中选择一个合适的语句
    • key: 实际使用的索引。如果为NULL,则没有使用索引。很少的情况下,MYSQL会选择优化不足的索引。这种情况下,可以在SELECT语句中使用USE INDEX(indexname)来强制使用一个索引或者用IGNORE INDEX(indexname)来强制MYSQL忽略索引
    • key_len:使用的索引的长度。在不损失精确性的情况下,长度越短越好
    • ref:显示索引的哪一列被使用了,如果可能的话,是一个常数
    • rows: 显示MySQL认为它执行查询时必须检查的行数.此参数很重要,直接反应的sql找了多少数据,在完成目的的情况下越少越好
    • extra列返回的描述的意义

 

  • 设置索引->设计表
    • 索引类型:
      •  Fulltext 全文本搜索索引:用于搜索长篇文章。
      •  Unique 唯一索引:  
        • 主键索引:primary key :加速查找+约束(不为空且唯一)
        • 唯一索引:unique:加速查找+约束 (唯一)
      • 联合索引
        • -primary key(id,name):联合主键索引
        • -unique(id,name):联合唯一索引
        • -index(id,name):联合普通索引
      • Normal 
        •  普通索引:加快搜索。
      • Spatial 
        • 空间索引。
    • 索引方法:
      • #我们可以在创建上述索引的时候,为其指定索引类型,分两类
        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 (强制索引的名字)

  •  

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值