大家好,又见面了,我是全栈君。
如何检查SQL语句是否用到索引?
使用“EXPLAIN sql语句”进行调试,查看possible_keys或key possible_keys:可能应用的索引 key:实际使用的索引
哪些情况下索引会被忽略
- 前导LIKE 语句 前导模糊查询不生效 (如 like ‘%XX’或者like ‘%XX%’)
//生效
explain select * from cartoon where `name` like '家里来了位道长大人%'
//不生效
explain select * from cartoon where `name` like 'U5%'
- “or“ 条件
- “in“ 条件
- “<>“ 不等于判断
- “between“ 范围条件,可使用 where xx> 1 and xx<3代替
- IS NULL 或 IS NOT NULL,判断为空
- 不能在索引上做任何操作(计算、函数、自动/手动类型转换)
MYSQL索引类型
索引类型
1. 普通索引 (index)
2. 唯一索引 (unique)
在普通索引的基础上,会进行排除重复值
3. 主键索引 (primary key)
和唯一索引的区别在于一个表里只能有一个主键索引,但是唯一索引可以有多个。
4. 组合索引
ALTER TABLE
table_name
ADD INDEX index_name (column1
,column2
,column3
)
5. 全文索引 (fulltext)
普通索引/唯一索引/主键索引 哪个速度更快?
速度是一样的快,因为三者都是采用btree二叉树算法进行查找。
2种索引算法
BTREE算法
Innodb和MyISAM默认的索引是BTREE索引 采用二叉树算法,左边的树枝小于根节点关键词,右边大于根节点,两边的树的深度不大于1,从而降低时间复杂度。
HASH算法
Mermory默认的索引是Hash索引 Hash索引只能用于HASH值比较,例如=,<> 操作符,不像BTREE索引需要从根节点到枝节点,最后才能访问到页节点这样多次IO访问,所以检索效率远高于BTREE索引。
为什么不默认采用HASH索引呢?
HASH只能用在=和<>上,所以功能受限,所以默认采用BTREE。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/111899.html原文链接:https://javaforall.cn