我有一个超过900万行的非常大的表,在我的软件中,我需要快速在循环中选择查询。问题是查询需要将近4秒才能完成。下面是查询之一(他们是在所有相似,它们都具有相同的WHERE子句是减缓下来。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
这里是节目东印度的输出:
| 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'和'tried = 1'吗? –