gpt4 book ai didi

mysql - 尽管有索引,但 sql 查询速度很慢

转载 作者:行者123 更新时间:2023-11-29 05:04:18 24 4
gpt4 key购买 nike

我坚持执行简单的 sql 查询。

查询:

SELECT * FROM company
WHERE
(IDCompanyMain in (ID1, ID2...) or IDCompany in (ID1, ID2...))
and Network="XXX";

每个字段都有索引,大约 10M 行。每个查询有 1 到 100 个 ID。

每个查询需要 >4 秒!如果我删除其中一个条件,结果将以毫秒为单位准备就绪。

EXPLAIN 说,mysql 使用网络索引并且有大约 500 万行有问题。如果尝试强制某些索引(USE 或 FORCE),则不使用任何索引。

我做错了什么?

解释:

id, select_type, table, type, possible_keys, key, key_len, ref, rows, Extra
'1', 'SIMPLE', 'company', 'ref', 'PRIMARY,UNetwork_ID,IIDCompanyMain,INetwork', 'INetwork', '98', 'const', '5270286', 'Using where'

最佳答案

只有一个索引被使用 - 用于 Network 列。

由于 OR 子句,不能使用 IDCompanyMainIDCompany 的索引。您必须对这些条件中的每一个执行两个单独的查询,然后将结果连接在一起:

(SELECT * FROM company WHERE IDCompanyMain in (ID1, ID2...) and Network="XXX")
UNION
(SELECT * FROM company WHERE IDCompany in (ID1, ID2...) and Network="XXX")

为了获得最佳查询性能,您需要两个复合索引 - (Network, IDCompanyMain) 和 (Network, IDCompany)

关于mysql - 尽管有索引,但 sql 查询速度很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51633591/

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