gpt4 book ai didi

mysql:双重条件 WHERE LIKE 会减慢 SELECT 查询的速度

转载 作者:行者123 更新时间:2023-11-29 07:06:14 24 4
gpt4 key购买 nike

我有 2 张 table :

POSTS (about 2000 rows)
ID title

ELEMENTS (about 60000 rows)
postID (fK) elementfield

基本上,如果搜索词位于 posts.title 或 elements.elementname 中,我想返回 ID。我使用以下查询:

SELECT SQL_CALC_FOUND_ROWS posts.ID 
FROM posts
LEFT JOIN elements
ON posts.ID = elements.postID
WHERE (
posts.post_title LIKE '%searchterm%'
OR elements.elementfield LIKE '%searchterm%'
)

它可以工作,但是非常非常慢(大约 40 秒!)。

我相信这是元素表的大小(超过 60.000 行),但如果我仅使用一个 WHERE 子句运行相同的查询

WHERE  elements.elementfield LIKE '%searchterm%' 

它会在几分之一秒内返回查找结果...

我不是数据库专家,但这看起来很基本......我做错了什么?感谢您的帮助!

编辑@Solarflare 运行解释我有这样的东西:

id     select_type     table     type    possible_keys     rows      Extra
1 SIMPLE posts eq_ref PRIMARY,type_ 1 Using
status_date Where

1 SIMPLE elements ALL NULL 67774 Using
where;
Using
join
buffer
(Block Nested Loop)

最佳答案

在 where 子句中使用 Or 是出了名的性能不佳。试试这个:

SELECT SQL_CALC_FOUND_ROWS p.ID 
FROM posts p
LEFT JOIN elements e
ON p.ID = e.postID
WHERE CONCAT(p.post_title, e.elementfield) LIKE '%searchterm%'

顺便问一下,SQL_CALC_FOUND_ROWS 是什么内置函数?

关于mysql:双重条件 WHERE LIKE 会减慢 SELECT 查询的速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41511653/

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