質問編集履歴

2 タイトル誤りについて記載しました。

mosa

mosa score 202

2017/03/09 14:41  投稿

MySQLには降順のインデックスがない?
**###############################################  
大変申し訳ありません。タイトルと内容が一致していなかったため、意味不明な質問になっていました。  
問題自体は解決しました。お騒がせしました。  
###############################################**  
 
---  
 
 
 
いつもお世話になっております。
MySQLのインデックスについての質問です。
毎度つまらない質問ですみません。頭がこんがらがってしまいまして。。。
a,b,c,d というカラムがあるテーブルに対して、a,b,c,d というインデックスを作成した場合、
以下のクエリを実行すると、OrderBy句に b が入っているため、Using Index Condition, **Using FileSort** となってしまいます。
DDL
```SQL
CREATE TABLE IF NOT EXISTS `hoge` (
 `id` INT NOT NULL AUTO_INCREMENT,
 `a` INT NULL,
 `b` INT NULL,
 `c` INT NULL,
 `d` INT NULL,
 PRIMARY KEY (`id`),
 INDEX `idx01` (`a`, `b`, `c`, `d`))
ENGINE = InnoDB
;
```
SQL
```SQL
SELECT
 *
FROM
 hoge
WHERE
 a = 10 AND b > 100 AND c < 1000
ORDER BY
 d, b
LIMIT
 100
;
```
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)
1 row in set (0.00 sec)
```
  • MySQL

    6972 questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • データベース

    835 questions

    データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

  • データベース設計

    181 questions

    データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

  • MariaDB

    377 questions

    MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

1 情報を追加しました。

mosa

mosa score 202

2017/03/09 14:00  投稿

MySQLには降順のインデックスがない?
いつもお世話になっております。
MySQLのインデックスについての質問です。
毎度つまらない質問ですみません。頭がこんがらがってしまいまして。。。
a,b,c,d というカラムがあるテーブルに対して、a,b,c,d というインデックスを作成した場合、
以下のクエリを実行すると、OrderBy句に b が入っているため、Using Index Condition, **Using FileSort** となってしまいます。
DDL  
```SQL  
CREATE TABLE IF NOT EXISTS `hoge` (  
 `id` INT NOT NULL AUTO_INCREMENT,  
 `a` INT NULL,  
 `b` INT NULL,  
 `c` INT NULL,  
 `d` INT NULL,  
 PRIMARY KEY (`id`),  
 INDEX `idx01` (`a`, `b`, `c`, `d`))  
ENGINE = InnoDB  
;  
```  
 
SQL  
```SQL
SELECT
 *
FROM
 hoge
WHERE
 a = 10 AND b > 100 AND c < 1000
ORDER BY
 d, b
LIMIT
 100
;
```
Index Condition として既に使用しているキーを OrderBy の第2ソートキーで再度使用することはできないのでしょうか。
つまり、上記のクエリで Using FileSort を発生させない方法はないのでしょうか。
(sort buffer を増やす、とかはなしで)
つまり、上記のクエリで 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)
  • MySQL

    6972 questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • データベース

    835 questions

    データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

  • データベース設計

    181 questions

    データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

  • MariaDB

    377 questions

    MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る