MYSQL两个表查询vs一次

时间:2012-11-20 18:36:25

标签: php mysql performance

我有这个问题:

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

1 个答案:

答案 0 :(得分:0)

我原本不打算回答,但我对这个问题的评论基本上都回答了。我的意见总结如下:

要获得准确的查询执行时间,请确保使用SQL_NO_CACHE运行查询。这将确保查询缓存不会扭曲结果。第一个表上的索引未被使用,因为LajmID位于其顶部,并且未在查询中使用。