【发布时间】:2021-10-31 23:33:16
【问题描述】:
我有一个简单的 MySQL 查询,在我使用条件语句之前,我在引用另一个模式的表的视图上执行一次 LEFT JOIN,搜索每个表的一列(一个虚拟)。
SELECT *
FROM table_a a
LEFT JOIN virtual_table_b b ON a.id = b.id
WHERE a.text LIKE '%somestring%'
OR b.text LIKE '%somestring%';
当somestring 相当短甚至阻止整个架构正常使用时,它的工作速度非常慢。
(我猜由于繁重的处理而暂停它,数据库的其余部分仍在工作)。
这些语句本身运行良好!
SELECT * FROM table_a a LEFT JOIN virtual_table_b b on a.id = b.id;
加入似乎很好 -> 大约需要 0.04 秒。
SELECT * FROM table_a a WHERE a.text LIKE '%somestring%';
SELECT * FROM virtual_table_b b WHERE b.text LIKE '%somestring%';
字符串匹配似乎也很好 -> 每个大约需要 0.04 秒。
我的猜测是,由于它是左连接,virtual_table_b 中的许多值都是 NULL,这需要大量计算时间?
两个表都有大约 40 000 个条目,其中的文本有时超过 60 000 个字符。
我正在使用 InnoDB 版本 5.7.22。
组合查询如此缓慢的可能原因是什么,我该如何改进?
【问题讨论】:
-
请提供
SHOW CREATE TABLE和EXPLAIN SELECT ...
标签: mysql sql query-optimization database-performance