优化mysql索引的问题

disbfnqx  于 2021-06-19  发布在  Mysql
关注(0)|答案(2)|浏览(294)

我有一个mysql表,大约有150万行。此表包含一个名为 companies (integer) 它包含几个不同的值(3或4)和另一个名为 orders (varchar) 包含许多不同的值(但有些相同)。
我创建了一个包含列的多列索引(类型索引) companies 以及 orders .
我有一个简单的问题

SELECT * FROM TABLE1 WHERE companies = 1 AND orders = '344A7884'

在执行这个查询时,无论是否实现索引,都没有执行时间差(大约4秒)。
我发现获得大约1秒执行时间的唯一方法是仅对“orders”创建索引并运行以下转换查询:

SELECT * FROM (SELECT * FROM TABLE1 WHERE orders = 34467884) RQ1 WHERE companies = 1

那似乎不太合适。有人能给我解释一下这个奇怪的行为,并提出一个更好的方法来优化索引吗?

zqry0prt

zqry0prt1#

第一次创建索引时肯定是个错误。将再次测试并查看此问题是否再次出现。谢谢你的评论。

jum4pzuy

jum4pzuy2#

如果索引列是 VARCHAR 然后不要用没有引号的数字来测试它。例如,如果 companiesVARCHAR(99) ,

companies = 1  -- will scan the entire table (slow)
companies = '1'  -- can use the index (fast)

为进一步讨论,请提供 SHOW CREATE TABLE 以及 EXPLAIN SELECT ... 如果 companies 比如说, INT 以及 orders 是一个 VARCHAR ,那么

WHERE companies = 1 AND orders = '344A7884'

这两种方法都能很快奏效:

INDEX(companies, orders)
INDEX(orders, companies)

相关问题