我有这个问题:
SELECT
cms_mod_lajmet_entry.LajmID,
page_id, date,
foto, eshte_video,
title, intro,
komente
FROM cms_mod_lajmet_entry, cms_mod_lajmet_entry_language
WHERE cms_mod_lajmet_entry.LajmID = cms_mod_lajmet_entry_language.LajmID
AND cms_mod_lajmet_entry.page_id = 2
AND cms_mod_lajmet_entry.publikimi = 1
AND cms_mod_lajmet_entry_language.language = 'sq'
AND cms_mod_lajmet_entry.renditja > 0
ORDER by renditja ASC, date DESC LIMIT 1
(加载时间= 0.1219)
当我拆分它们时:
SELECT
LajmID,
page_id,
date,
foto,
eshte_video,
komente
FROM cms_mod_lajmet_entry
WHERE cms_mod_lajmet_entry.page_id = 2
AND cms_mod_lajmet_entry.publikimi = 1
AND cms_mod_lajmet_entry.renditja > 0 ORDER by renditja ASC, date DESC LIMIT 1
(加载时间= 0.0801)
并单独查询:($ t [LajmID]是最后一个表中的PrimaryID)
SELECT
title,
intro
FROM cms_mod_lajmet_entry_language
WHERE LajmID = $t[LajmID]
AND language = 'sq'
(加载时间= 0.0006)
总计:0.1219> 0.0807(0.0801 + 0.0006)。
这看起来真的更快,和/或是否还有其他更快的方式。
索引如下:
第一张表:
LajmID BTREE否
LajmID 36380 A
page_id 36380 A
publikimi 36380 A
klika 36380 A
第二张表:
LajmID BTREE否
LajmID 38456 A
语言38456 A
答案 0 :(得分:0)
我原本不打算回答,但我对这个问题的评论基本上都回答了。我的意见总结如下:
要获得准确的查询执行时间,请确保使用SQL_NO_CACHE
运行查询。这将确保查询缓存不会扭曲结果。第一个表上的索引未被使用,因为LajmID
位于其顶部,并且未在查询中使用。