我有一个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
那似乎不太合适。有人能给我解释一下这个奇怪的行为,并提出一个更好的方法来优化索引吗?
2条答案
按热度按时间zqry0prt1#
第一次创建索引时肯定是个错误。将再次测试并查看此问题是否再次出现。谢谢你的评论。
jum4pzuy2#
如果索引列是
VARCHAR
然后不要用没有引号的数字来测试它。例如,如果companies
是VARCHAR(99)
,为进一步讨论,请提供
SHOW CREATE TABLE
以及EXPLAIN SELECT ...
如果companies
比如说,INT
以及orders
是一个VARCHAR
,那么这两种方法都能很快奏效: