- 首页 > it技术 > >
- 查看是否走了索引:使用解释函数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,否则就可能会出现性能问题。
- table:显示这一行的数据是关于哪张表的
- possible_keys:显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从WHERE语句中选择一个合适的语句
- key: 实际使用的索引。如果为NULL,则没有使用索引。很少的情况下,MYSQL会选择优化不足的索引。这种情况下,可以在SELECT语句中使用USE INDEX(indexname)来强制使用一个索引或者用IGNORE INDEX(indexname)来强制MYSQL忽略索引
- key_len:使用的索引的长度。在不损失精确性的情况下,长度越短越好
- ref:显示索引的哪一列被使用了,如果可能的话,是一个常数
- rows: 显示MySQL认为它执行查询时必须检查的行数.
- 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
- 【后端|mysql索引使用】例: select * from 表名 force index (强制索引的名字)
推荐阅读