优化 mysql 索引的问题

Issue for optimizing mysql index

我有一个 mysql table 大约有 150 万行。 此 table 包含一个名为 companies (integer) 的列,其中包含几个不同的值(3 或 4)和另一个名为 orders (varchar) 的列,其中包含许多不同的值(但有些相同)。

我创建了一个包含列 companiesorders 的多列索引(INDEX 类型)。

我有一个简单的查询

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

无论有无索引执行此查询时,执行时间都没有差异(大约 4 秒)。

我发现获得大约 1 秒执行时间的唯一方法是仅在 "orders" 和 运行 上创建索引,以下转换查询:

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

这似乎不太合适。 有人可以向我解释这种奇怪的行为并建议一种更好的索引优化方法吗?

肯定是第一次创建索引的时候出错了。将再次测试,看看是否再次出现此问题。 感谢评论。

如果索引列是 VARCHAR,则 not 将其与不带引号的数字进行测试。例如,如果 companiesVARCHAR(99)

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

如需进一步讨论,请提供SHOW CREATE TABLEEXPLAIN SELECT ...

如果 companiesINTordersVARCHAR,那么

WHERE companies = 1 AND orders = '344A7884'

使用以下 其中之一 会非常快:

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