gpt4 book ai didi

mysql - mysql索引优化问题

转载 作者:行者123 更新时间:2023-11-29 10:01:18 25 4
gpt4 key购买 nike

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

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

我有一个简单的查询

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

当我执行此查询时,无论是否已实现索引,执行时间都没有差异(大约 4 秒)。

我发现获得大约 1 秒执行时间的唯一方法是仅在“订单”上创建索引并运行以下转换后的查询:

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

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

最佳答案

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

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

为了进一步讨论,请提供SHOW CREATE TABLEEXPLAIN SELECT ...

如果 companiesINT 并且 ordersVARCHAR,那么

WHERE companies = 1 AND orders = '344A7884'

使用其中任何一个都可以非常快地工作:

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

关于mysql - mysql索引优化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52890183/

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