У меня очень большая таблица из более чем 9 миллионов строк, и в моем программном обеспечении мне нужно быстро делать запросы на нее в цикле. Проблема в том, что запросы занимают почти 4 секунды. Вот один из запросов (все они похожи в том, что все они имеют то же самое ИНЕКЕ, что замедляет их вниз:.MySQL Как я могу ускорить этот запрос SELECT?
SELECT MIN(id)
FROM `04c1Tg0M`
WHERE `tried` = 0;
Я использую проверенную колонку как логическое значение 1 или 0. Здесь РАЗЪЯСНЯЕМ из этого запроса:
--------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+-------+---------------+------+---------+------+---------+--------------------------+
| 1 | SIMPLE | 04c1Tg0M | index | NULL | pdex | 158 | NULL | 9275107 | Using where; Using index |
+----+-------------+----------+-------+---------------+------+---------+------+---------+--------------------------+
Вот структура таблицы:
CREATE TABLE `04c1Tg0M` (
`id` int(20) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL,
`tried` tinyint(1) DEFAULT '0',
PRIMARY KEY (`id`),
KEY `pdex` (`username`,`id`,`tried`)
) ENGINE=MyISAM AUTO_INCREMENT=9275108 DEFAULT CHARSET=utf8
Здесь выход шоу Indes:
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| 04c1Tg0M | 0 | PRIMARY | 1 | id | A | 9275107 | NULL | NULL | | BTREE | |
| 04c1Tg0M | 1 | pdex | 1 | username | A | 9275107 | NULL | NULL | | BTREE | |
| 04c1Tg0M | 1 | pdex | 2 | id | A | 9275107 | NULL | NULL | | BTREE | |
| 04c1Tg0M | 1 | pdex | 3 | tried | A | 9275107 | NULL | NULL | YES | BTREE | |
+----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
А вот выход из запроса в вопрос:
+---------+
| MIN(id) |
+---------+
| 1 |
+---------+
1 row in set (3.76 sec)
мне нужно резко сократить время выполнения запросов. Любая помощь приветствуется.
Можете ли вы опубликовать вывод 'EXPLAIN SELECT'? Знаете ли вы, какой процент строк имеет 'try = 0' против' try = 1'? –