-
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列返回的描述的意义
- 我们只需要注意一个最重要的type 的信息很明显的提现是否用到索引:
- 设置索引->设计表
- 索引类型:
- 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 (强制索引的名字)
-
-