0

アプリのインデックス ページでは、MySQL-DB のテーブルからすべてのエントリを取得する必要があります。フィルターを設定することは可能ですが、最初は where-clause はWHERE 1=1です。それは期待される結果を返しますが、EXPLAINインデックスが使用されていないため、クエリはかなり遅くなります。

これを解決する最善の方法は何ですか?


編集:

これがクエリです

SELECT 
    `Module`.`id`, 
    `Module`.`name`, 
    `Module`.`module_class_id`, 
    `Module`.`editor`, 
    `ModuleClass`.`name`, 
    `Editor`.`name`, 
    `ModuleClass`.`id`, 
    `Editor`.`id`, 
    `Mc`.`id` 
FROM `Module` 
LEFT JOIN `ModuleClass` ON (`Module`.`module_class_id` = `ModuleClass`.`id`) 
LEFT JOIN `Editor` ON (`Module`.`editor` = `Editor`.`id`) 
LEFT JOIN `Mc` ON (`Module`.`id` = `Mc`.`module_id`) 
WHERE 1 = 1 
GROUP BY `Module`.`id` 
ORDER BY 
    `Module`.`id` DESC, 
    `ModuleClass`.`name` ASC, 
    `Editor`.`name` ASC 
LIMIT 50

そして、これは説明の結果です: Explain クエリのスクリーンショット

そしてはい:ここでデータベースがインデックスを使用していることはあまり意味がないことを理解していますが、これは私にとってかなり一般的なケースであるように思われるので、問題に直面するためのベストプラクティスがあることを望みました

4

1 に答える 1

1

order by 句でインデックスを使用します。したがって、ID が primary_index の場合は次のように記述しますWHERE 1=1 order by ID

于 2013-06-11T10:04:44.777 に答える