gpt4 book ai didi

MySQL:整数值和字符串字段与索引的比较

转载 作者:可可西里 更新时间:2023-11-01 06:40:35 24 4
gpt4 key购买 nike

a_tablestring_column 上有索引。
我有一个问题:

SELECT * FROM a_table WHERE string_column = 10;

我用EXPLAIN发现没有使用索引。
为什么?你能帮我找到 MySQL 文档链接吗?

更新:Sandbox (SQL Fiddle)

最佳答案

要点是,如果数据库必须在比较的表端进行转换,则不能使用索引。

除此之外,数据库总是隐藏字符串 -> 数字,因为这是确定性的方式(否则 1 可能会转换为评论中提到的 '01'、'001')。

所以,如果我们比较这两种让您感到困惑的情况:

-- index is used
EXPLAIN SELECT * FROM a_table WHERE int_column = '1';

DB 将字符串 '1' 转换为数字 1,然后执行查询。它终于在两边都有了 int,所以它可以使用索引。

-- index is NOT used. WTF?
EXPLAIN SELECT * FROM a_table WHERE str_column = 1;

同样,它将字符串转换为数字。但是,这次它必须转换存储在表中的数据。事实上,您正在执行类似 cast(str_column as int) = 1 的搜索。这意味着,您不再搜索索引数据,数据库不能使用索引。

请查看此以了解更多详细信息:

关于MySQL:整数值和字符串字段与索引的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16786063/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com