gpt4 book ai didi

mysql - WHERE 子句中条件的顺序会影响 MySQL 的性能吗?

转载 作者:可可西里 更新时间:2023-11-01 06:59:39 24 4
gpt4 key购买 nike

给定以下查询:

select ....................
from ......................
where
(
lower(c01) like ?
or lower(c02) like ?
or lower(c5x3_.c01) like ?
or lower(5x3_.c02) like ?
)
and(
(
lower(c03) like ?
or lower(c04) like ?
or lower(c5x3_.c03) like ?
or lower(5x3_.c04) like ?
)
/* ...Multiple further LIKEs... */
and status=1; /* status is a non-nullable value whose values can only be 1 or 2 */

前 10 或 12 个限制是对各种模式的 LIKE - 我知道这可能很慢所以总是把状态标准放在第一位,即:

status=1;
and(other LIKEs)

我的问题:首先应用更简单的限制是否会提高性能(例如,在这种情况下,被比较的 int 值不能为空值并且只有 2 个可能的值)?或者,如果将 LIKE 放在前面,然后再显示状态检查,性能是否会相同?

让我们假设任何列上都没有索引来简化问题。

最佳答案

(部分回答,部分询问更多信息...)

status=1 放在最前面或最后没有区别。换句话说,WHERE 中的ANDed 事物的顺序并不重要。

LOWER(x) LIKE '...' 比将 x 的排序规则设置为大小写折叠效率低得多,例如 utf8_general_ci(ci 表示“不区分大小写”)。使用 ci 排序规则,您只需执行 x LIKE '...'

但是,这不会加快速度。你有很多OR;这些都是低效的,因为索引通常是无用的,因此需要全表扫描。

通常,OR 可以变成UNION 以便能够使用索引。但可能不是你的情况。

请提供SHOW CREATE TABLE。嗯......查询的模式让我想知道你是否有很多“相同”的表。如果是这样,也许我们可以将其视为设计模式的低效方法。所以,请告诉我们 c01c03(等)是否相同。

什么样的值将被放入LIKEs?字?数字?任意字符串?通配符?前导通配符?不领先?如果是“单词”,则 FULLTEXT 可能 有用。但是...我们需要仔细查看所涉及的长(?)表列表。

关于mysql - WHERE 子句中条件的顺序会影响 MySQL 的性能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40489359/

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