|
カテゴリ:データベース
MySQLのクエリを高速化する為にindexを作成した。
クエリは最後に「order by XXX desc」指定があるもので、そこも考慮してある。 (index作る時に降順で設定済み) で、explainを見てみると、Extraが「Using where; Using filesort」 ・・・Using filesort?order byでindex効いてない? MySQLバージョンは5.0.27。 アレコレ検索していると、こちらのページで気になる事が書いてあった。 WHEREで指定していないindexカラムはorder byでは使用されない? 試しにorder byで使用したカラムをWHEREで無意味に使用してみる。 AND [column]=true こんなのを追加。 すると見事にUsing filesortが消え、Extraは「Using where」のみ。 これどうなってるんだろう? DB設計の段階なので、サンプルデータが少なすぎてクエリ速度の差が分からない・・・。 んー、とりあえずorder byで指定するものはwhereで無理やり使っておきますかね。 ちなみに AND [column] IS NOT NULL AND [column] >= 0 AND [column] > 0 上記3つは「Using where; Using filesort」でした。 わけ分からん。 --追記-- AND [column]=true これでやると値が1のやつが対象になっちゃった・・・キャストが思ってたのと違うなぁ。 あっ! AND [column]=[column] これでいいじゃんorz と思って試したら、無意味な式は実行されてないっぽいな・・・ もうどないせいっちゅーんじゃ! そして調べているうちにある文を発見してしまった -引用(MySQL5.1マニュアル)- index_col_name 仕様はASCかDESCで終わる事ができます。これらのキーワードは昇順や降順インデックス値ストレージを指定する為の将来の拡張子として許容されます。現在は、それらは解析されますが無視されます。インデックス値は毎回昇順で格納されます。 -/引用- ・・・えーっと、今はindex作成時にdesc指定しても意味ないって事? もうどうにでもな~れ~(AAry お気に入りの記事を「いいね!」で応援しよう
Last updated
2009.09.10 18:02:20
コメント(0) | コメントを書く
[データベース] カテゴリの最新記事
|