MySQL 索引 |与 LIKE 一起使用

标签 mysql indexing

我有一个表说“abcd”

内容如下

ID | email       | 

24 | abcd@g.com  | 
23 | asdsa@gm.com|
32 |asd@ggm.com  |

现在,我已经在 (ID,email) 上创建了一个索引

当我执行查询时, EXPLAIN SELECT * FROM abcd WHERE ID='23'; 我可以看到正在使用索引。

但是,当我将查询更改为 EXPLAIN SELECT * FROM abcd WHERE ID LIKE '2%';

索引不再被使用

为什么会这样?不应该在这两种情况下都使用索引吗?

谢谢

最佳答案

如果你的 ID 是整数类型,它的索引将不会像字符串索引那样工作:它不会在内部使用十进制数字,而是固定长度的二进制表示

想想看:'2%' 必须匹配这些数字:

2
20
200
2000
...

但是对于 MySQL 引擎来说,将 '2%' 与这些表示相匹配并不是微不足道的:

0x0002
0x0014
0x00C8
0x07D0
0x4E20
...

虽然理论上它可以在内部将“2%”模式转换为以下内容:

   ID BETWEEN   20 AND   29
OR ID BETWEEN  200 AND  299
OR ID BETWEEN 2000 AND 2999

我认为这极不可能。

关于MySQL 索引 |与 LIKE 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10944098/

相关文章:

java - 如何将 SQL 转换为 JPQL 查询?

mysql - mysql "Waiting for table metadata lock"上的单个连接到 DROP INDEX

SQL Server 为什么不使用索引

javascript - JavaScript 中的复合 B 树索引

mysql - 从 Mysql 表中删除重复项

mysql - 如何在 SELECT 中使用别名

c# - Advantage 数据库错误 5175

c# - 将 c# `Index` 和 `Range` 与锯齿状数组一起使用

sql - 在大表上快速使用 LIMIT 和 OFFSET 进行 SELECT

javascript - 如何使用php将动态数据插入json