1

私はずっと探していましたが、満足のいく解決策を見たことはありません。だから誰かが助けることができます..

時間がかかる単純なクエリを含む単純なテーブルがあります。バージョン5.5.32-0ubuntu0.13.04.1を使用しています(実際にはLinux Mint Oliviaです。また、MariaDBに切り替えましたが、違いはないようです。)

デモ用にテスト テーブルを作成しました。

mysql> テーブル作成テストを表示します。

| test | CREATE TABLE `test` (
`sym` char(5) COLLATE utf8_bin DEFAULT NULL,
`date` date DEFAULT NULL,
`vol` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin |

次に、別のテーブルから 1,100 万行を入力しました。「sym」に単純なインデックスを追加すると

'SELECT * FROM test WHERE Sym='ORCL';

ショー

セットで 6467 行 (0.10 秒)

次に、日付にインデックスを追加すると、次のような場合に時間がかかります。

SELECT * FROM test WHERE Date='2008-10-1';

セットで 2488 行 (12.40 秒)

これは疑わしいことにインデックスのない時間に近く、クエリの実行中はハード ドライブのライトが点灯しています。

USE INDEX や FORCE INDEX も試しましたが、効果がないようです。

BTW SELECT COUNT(*) FROM test WHERE Date='2008-10-1';

戻り値

+----------+
| COUNT(*) |
+----------+
| 2488     |
+----------+
1 row in set (0.02 sec)

そして、日付フィールドだけを要求すると、

SELECT date from test where date=20081020;

約 0.30 秒で正しい行数が返されるため、そのためにインデックスを使用しています。

EXPLAIN SELECT * FROM test WHERE Date='2008-10-1';

ショー (日付インデックスを「dt」と呼びました)

+------+-------------+---------------+------+---------------+------+---------+-------+------+-------+
| id   | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+------+-------------+-------+------+---------------+------+---------+-------+------+-------+
| 1    | SIMPLE | test | ref | dt | dt | 4 | const | 2445 | |
+------+-------------+-------+------+---------------+------+---------+-------+------+-------+

Extra 列が空白になっていることに注意してください。USE INDEX と FORCE INDEX も同様です。

なぜこれがそんなに時間がかかるのか誰か教えてもらえますか? もっと情報を提供できるかどうか教えてください。

4

0 に答える 0