gpt4 book ai didi

MySQL 第二个抽象连接显着减慢了查询速度

转载 作者:行者123 更新时间:2023-11-29 12:53:21 25 4
gpt4 key购买 nike

当我向联接添加第二个抽象级别时,即联接首先联接的表,查询时间将乘以 1000 倍

mysql> SELECT xxx.content.id, columns.stories.title, columns.stories.date
-> FROM xxx.content
-> LEFT JOIN columns.stories on xxx.content.contentable_id = columns.stories.id
-> WHERE columns.stories.title IS NOT NULL
-> AND xxx.content.contentable_type = 'PublisherStory';

0.01秒内得出结果

mysql> SELECT xxx.content.id, columns.photos.id as pid, columns.stories.title, columns.stories.date
-> FROM xxx.content
-> LEFT JOIN columns.stories on xxx.content.contentable_id = columns.stories.id
-> LEFT JOIN columns.photos on columns.stories.id = columns.photos.story_id
-> WHERE columns.stories.title IS NOT NULL
-> AND xxx.content.contentable_type = 'PublisherStory';

14秒内得出结果

这是在记录数在 10ks 到 100ks 之间的表上执行的

这是正常现象还是可能导致速度如此缓慢的原因?

第一个查询计划:

+----+-------------+---------+--------+---------------+---------+---------+--------------------------------------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------+--------+---------------+---------+---------+--------------------------------------+------+-------------+
| 1 | SIMPLE | content | ALL | NULL | NULL | NULL | NULL | 7099 | Using where |
| 1 | SIMPLE | stories | eq_ref | PRIMARY | PRIMARY | 8 | xxx.content.contentable_id | 1 | Using where |
+----+-------------+---------+--------+---------------+---------+---------+--------------------------------------+------+-------------+

第二个查询

+----+-------------+---------+--------+---------------+---------+---------+--------------------------------------+-------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------+--------+---------------+---------+---------+--------------------------------------+-------+-------------+
| 1 | SIMPLE | content | ALL | NULL | NULL | NULL | NULL | 7099 | Using where |
| 1 | SIMPLE | stories | eq_ref | PRIMARY | PRIMARY | 8 | xxx.content.contentable_id | 1 | Using where |
| 1 | SIMPLE | photos | ALL | NULL | NULL | NULL | NULL | 21239 | |
+----+-------------+---------+--------+---------------+---------+---------+--------------------------------------+-------+-------------+

最佳答案

如果加入 columns.photos 速度减慢很多,可能是因为:photos.story_id 不是故事的外键,并且该列上没有索引。

没有看到你的表结构,我无法确切地告诉你,但我建议你验证 photos.story_id 是否为外键,如果您的 mysql 版本不是支持外键(相当旧)在该列上放置索引。

  • 我也会按原样检查 contentable_type 和 Stories.title 上的索引附近的一部分。

关于MySQL 第二个抽象连接显着减慢了查询速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24435669/

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