我有两个模式,都是相同的,其中一个的数据量少了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;
第二种解释是完全不同的。我不确定下一步要采取什么调试步骤。
我读过很多次,这是由于他们没有足够的内存,它需要创建一个文件来做它的工作。这是在awsrds中运行的,并且监视确实有一个~20gig的已利用硬盘空间,然后它会恢复所有内存,而另一个查询不会这样做。
判断这两种模式的不同之处的最佳方法是什么?
调试完成
使用mysqldump删除和重建模式问题仍然存在。
删除并重新创建所涉及的外键
测试12个相同的模式
评论中的附加信息
版本=MySQL5.5.46
q\u quoteid在bb\u quote表中
explain format=json select不起作用,我认为这个版本的mysql不支持它
暂无答案!
目前还没有任何答案,快来回答吧!