【发布时间】:2018-07-05 09:04:57
【问题描述】:
最近我在以下用例中发现了一个性能问题 在我有一个带有 INT 索引列“MyCode”的表“MyTable”之前 之后需要更改将“MyCode”列转换为 VARCHAR 的表结构(保留列上的索引)
ALTER TABLE MyTable CHANGE MyCode MyCode VARCHAR(250) DEFAULT NULL
然后遇到了意外的延迟,正在执行如下查询:
SELECT * FROM MyTable where MyCode = 1234
这个查询完全忽略了 MyCode VARCHAR 索引,印象是它正在全面扫描表
将查询转换为
SELECT * FROM MyTable where MyCode = "1234"
性能恢复到对 VARCHAR 索引的最佳利用
所以问题是......如何解释它......实际上 MySQL 如何处理索引。或者可能需要更改一些数据库设置以避免这种情况?
【问题讨论】:
标签: mysql performance indexing casting