3

次のクエリがあります。

SELECT * FROM `title_mediaasset` 
  WHERE upload_id is not null 
  ORDER BY `upload_date` DESC

ほぼ 1 秒かかり、インデックスは使用しません。

id  select_type      table              type    possible_keys           key     key_len  ref    rows    Extra
1   SIMPLE           title_mediaasset   ALL     upload_id,upload_id_2   NULL    NULL    NULL    119216  Using where; Using filesort

このクエリを改善するにはどうすればよいですか?

このテーブルには約 10 万件の結果が格納されており、おそらく来年には 100 万件に増えるでしょう。

4

1 に答える 1

2

結果からすべての行とすべての列が必要な場合、クエリを書き直して改善することはできません。にインデックスがないため、実行速度が遅い可能性がありますupload_date

すべての行が必要ない場合は、 を使用するLIMITと、ORDER BY.

すべての列が必要ない場合は、SELECT [columns you need]代わりに を使用しますSELECT *。そうすれば、クエリを本当に最適化する必要がある場合は、必要な列をインデックスに配置して、インデックスからすべてを直接読み取ることができますindex on (upload_id, upload_date, [other columns in select statement])

すべての列、またはかなりの数の列が必要な場合は、追加するだけindex on (upload_id, upload_date)です。

于 2013-07-23T17:13:37.023 に答える