mysql - MySQL 对非常基本的查询、索引、外键和所有内容的慢连接似乎都对齐
问题描述
我有两个模式,两者都是相同的,其中一个数据少了大约 5 倍,并且使用相同的索引、外键、数据库服务器以及我能想到检查的任何其他内容,查询速度要慢 120 倍。
这是两个查询:
-- Bigger Database, takes .5 seconds, has ~900k and 80 records
select *
from schemaA.bb_quote
inner join schemaA.scb_user
ON scb_user.usr_uid = bb_quote.q_usr_uid
order by q_quoteid desc
limit 20;
-- smaller database, takes 2 minutes, has ~211k and 4 records
select *
from schemaB.bb_quote
inner join schemaB.scb_user
ON scb_user.usr_uid = bb_quote.q_usr_uid
order by q_quoteid desc
limit 20;
我运行以下命令来解释命令并且解释不同。
explain select *
from schemaA.bb_quote
inner join schemaA.scb_user
ON scb_user.usr_uid = bb_quote.q_usr_uid
order by q_quoteid desc
limit 20;
explain select *
from schemaB.bb_quote
inner join schemaB.scb_user
ON scb_user.usr_uid = bb_quote.q_usr_uid
order by q_quoteid desc
limit 20;
第二个以非常不同的解释结束。我不确定下一步要采取什么调试步骤。
我读过很多次,这是他们没有足够的内存的结果,它需要创建一个文件来完成它的工作。这是在 AWS RDS 中运行的,并且监控确实有大约 20gig 的已用硬盘空间下降,然后它恢复了所有内存,而其他查询没有这样做。
分辨这两种模式之间有什么不同的最佳方法是什么?
调试完成
- 使用 mysqldump 删除和重建模式仍然会出现问题。
- 删除并重新创建所涉及的外键
- 测试〜12个其他模式都一样
来自评论的附加信息
- 版本 = MySQL 5.5.46
- q_quoteid 在 bb_quote 表中
- EXPLAIN FORMAT=JSON SELECT 不起作用,我认为这个版本的 MySQL 不支持
解决方案
推荐阅读
- javascript - 如何使用 jQuery 将 if 条件添加到 append() 中
- c# - 从 Azure Functions 中的 Azure 服务总线接收 JSON(Cosmos DB 文档)作为输入
- node.js - 检索 JWT 身份验证的证书/密钥时出现问题。(节点/Express/C#/IdentityServer)
- r - ggplot histogram 在闪亮的应用程序中失败
- r - 使用 ggplot2 绘制地图
- angular - 使用带有电子+角2的winston记录器
- python - python 3将列表转换为csv
- datetime - 以 sas 计算时差(军用时间)
- latex - 如何在我的文档中使用乳胶创建“Microsoft”?
- ios - Firebase 注册令牌无效。检查令牌格式