gpt4 book ai didi

Mysql没有使用正确的索引

转载 作者:行者123 更新时间:2023-11-29 17:47:22 27 4
gpt4 key购买 nike

我有一个生成 SQL 的框架。其中一个查询使用我的索引“A”并在 7 秒内返回结果。我发现我可以优化它,并创建了一个索引“B”。

现在,如果我运行“解释我的查询”,它仍然使用我的索引 A。但是,如果我强制使用索引 B,我将在 1 秒内获得结果(快 7 倍)

很明显,我的索引 B 比索引 A 更快。我无法使用“强制索引”或“使用索引”命令,因为我的 sql 是从不支持此功能的框架生成的。

那么,为什么mysql不自然地使用最快的索引。有没有一种方法可以告诉 mysql 始终使用某个索引而不添加“use”或“force”。

查询:

SELECT *
FROM soumission
LEFT OUTER JOIN region_administrative
ON soumission.region_administrative_oid=region_administrative.oid
WHERE (soumission.statut=2
AND ((soumission.telephone LIKE '%007195155134070067132211046052045128049212213255%'
OR (soumission.autre_telephone LIKE '%007195155134070067132211046052045128049212213255%'))
OR (soumission.cellulaire LIKE '%007195155134070067132211046052045128049212213255%')))
ORDER BY soumission.date_confirmation DESC, soumission.numero;

我在多个列“statut”、“telephone”、“autre_telephone”、“cellulaire”上添加了索引

如果我强制使用此索引,我的查询速度会快 7 倍,但如果我不指定要使用哪个索引,它会使用另一个索引(仅在 statut 字段上),速度会慢 7 倍

这里是如果我选择一个大日期期间(使用错误的索引)的解释

see it could use the ix_statut_date_confirmation2 but it it not

这是当我选择一个小日期窗口时 see it's using the right index "ix_statut_date_confirmation_2"

最佳答案

这似乎就是你正在做的事情......

SELECT  s.*, ra.*
FROM soumission AS s
LEFT OUTER JOIN region_administrative AS ra ON s.region_administrative_oid=ra.oid
WHERE s.statut = 2
AND ( s.telephone LIKE '%007195155134070067132211046052045128049212213255%'
OR s.autre_telephone LIKE '%007195155134070067132211046052045128049212213255%'
OR s.cellulaire LIKE '%007195155134070067132211046052045128049212213255%'
)
ORDER BY s.date_confirmation DESC, s.numero;

如果您不需要ra.*,请删除LEFT JOIN

您建议的多列索引是无用的,除非... statut = 2 对于少于 20% 的行,否则不会使用。在这种情况下,它将仅使用索引的第一列。

OR 无法建立索引。 (见下文)

LIKE 上的前导通配符会导致索引失败。您需要前导或尾随通配符吗?

ORDER BY 中混合使用 DESCASC 无法使用索引来避免排序。

那么,该怎么办呢?不要使用 3 列来存储 3 个电话号码,而是使用另一个表来存储电话号码。然后对于给定的 soumission 有任意数量的行。然后,由于避免了 OR,搜索该表可能会更快 - 但前提是您去掉前导通配符。

(这是一个非常长的电话号码!是真的吗?)

关于Mysql没有使用正确的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49699861/

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