【java基础一:mysql索引】
·
| 索引类型 | 用途 |
|---|---|
| Fulltext(全文索引) | 专门针对 CHAR、VARCHAR、TEXT 等文本字段,非常适合博客文章内容、商品描述、学生表中的长文本名称,用法:WHERE MATCH(name) AGAINST(‘三’) |
| Normal(普通索引) | 最基本、最常见的索引类型,没有任何附加的限制条件,支持=、>、< 以及 LIKE ‘abc%’(前缀匹配) |
| Spatial(空间索引) | 有严格的限制,地图应用、外卖系统中的“查找附近 3 公里内的餐厅”等处理地理位置信息,不常用 |
| Unique(唯一索引) | 该索引列的值必须是唯一的,不允许出现重复数据,但允许有空值(NULL) |



EXPLAIN SELECT id,NAME FROM `student` where SUBSTR(name, 1, 2) = '张三' -- 不会走,因为对name这一行使用了函数,还有WHERE phone = 138这种,如果phone在数据库是字符串类型,没有加上单引号,也是作为隐式类型转换,本质也是函数操作,如果做了计算也不会走
EXPLAIN SELECT id,NAME FROM `student` where name = '张三' or xuexiao='北京大学' -- 不会走,因为对xuexiao这一行没有加索引,使用or条件的时候一个列没有创建,就不会走
EXPLAIN SELECT id,NAME FROM `student` where name != '张三' -- 不会走,<>与IS NOT NULL 同样不会,索引适合查找“具体的值”或“范围”,查找“除了张三以外的所有人”,"排除空值" 都是意味着要扫描索引树的大部分节点,优化器通常认为直接扫表更快
更多推荐

所有评论(0)