###############################################
大変申し訳ありません。タイトルと内容が一致していなかったため、意味不明な質問になっていました。
問題自体は解決しました。お騒がせしました。
###############################################
いつもお世話になっております。
MySQLのインデックスについての質問です。
毎度つまらない質問ですみません。頭がこんがらがってしまいまして。。。
a,b,c,d というカラムがあるテーブルに対して、a,b,c,d というインデックスを作成した場合、
以下のクエリを実行すると、OrderBy句に b が入っているため、Using Index Condition, Using FileSort となってしまいます。
DDL
SQL
1CREATE TABLE IF NOT EXISTS `hoge` ( 2 `id` INT NOT NULL AUTO_INCREMENT, 3 `a` INT NULL, 4 `b` INT NULL, 5 `c` INT NULL, 6 `d` INT NULL, 7 PRIMARY KEY (`id`), 8 INDEX `idx01` (`a`, `b`, `c`, `d`)) 9ENGINE = InnoDB 10;
SQL
SQL
1SELECT 2 * 3FROM 4 hoge 5WHERE 6 a = 10 AND b > 100 AND c < 1000 7ORDER BY 8 d, b 9LIMIT 10 100 11;
Index Condition として既に使用しているキーを OrderBy の第2ソートキーで再度使用することはできないのでしょうか。
つまり、上記のクエリで Using Index Condition を維持したまま Using FileSort を発生させない方法はないのでしょうか。
(sort buffer を増やす、とかはなしで)
MariaDB [cake]> select count(*) from hoge; +----------+ | count(*) | +----------+ | 1048576 | +----------+ 1 row in set (0.45 sec) MariaDB [cake]> select version(); +-----------------------+ | version() | +-----------------------+ | 10.0.29-MariaDB-wsrep | +-----------------------+ 1 row in set (0.00 sec)
回答5件
あなたの回答
tips
プレビュー