〜1.500.000レコードのテーブルがあります:
CREATE TABLE `item_locale` (
`item_id` bigint(20) NOT NULL,
`language` int(11) NOT NULL,
`name` varchar(256) COLLATE utf8_czech_ci NOT NULL,
`text` text COLLATE utf8_czech_ci)
PRIMARY KEY (`item_id`,`language`),
KEY `name` (`name`(255))
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
item_id
、を主キーとして使用し、サイズ255language
でインデックスを作成します。name
次のクエリで:
select item_id, name from item_locale order by name limit 50;
必要な行は50行だけですが、選択には約3秒のイベントがかかります。
そのようなクエリを高速化するために何ができますか?
編集:あなたの何人かはインデックスを追加することを提案しました。前述したように、name
列にはサイズ255のインデックスが付けられています。
私explain
は次のコマンドを実行しました:
+----+-------------+---------------+------+---------------+------+---------+------+---------+----------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------------+------+---------------+------+---------+------+---------+----------------+
| 1 | SIMPLE | item_locale | ALL | NULL | NULL | NULL | NULL | 1558653 | Using filesort |
+----+-------------+---------------+------+---------------+------+---------+------+---------+----------------+
不思議なことに、インデックスを使用していないようです...