-1

私はこのクエリを持っています:

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

2 番目のテーブル:

LajmID BTREE いいえ いいえ LajmID 38456 A
言語 38456 A

4

1 に答える 1

0

もともと答えるつもりはありませんでしたが、質問に対する私のコメントは基本的に答えました。私のコメントを以下に要約します。

正確なクエリ実行時間を取得するには、必ず を使用してクエリを実行してくださいSQL_NO_CACHE。これにより、クエリ キャッシュが結果を歪めないことが保証されます。最初のテーブルのインデックスは、LajmIDその上にあり、クエリで使用されていなかったため、使用されていませんでした。

于 2012-11-21T01:13:08.783 に答える