我知道此主题已经发布了很多问题,但我找不到解决问题的方法。
我只有一个包含1.042.162行的表。 表定义:
CREATE TABLE `tbllinks` ( `idLinks` int(11) NOT NULL AUTO_INCREMENT, `linksText` varchar(500) DEFAULT NULL, `linksLastChecked` datetime DEFAULT NULL, `linksLastNewData` datetime DEFAULT NULL, PRIMARY KEY (`idLinks`), UNIQUE KEY `idtblLinks_UNIQUE` (`idLinks`), UNIQUE KEY `linksText_UNIQUE` (`linksText`), KEY `fasterDate` (`linksLastChecked`), KEY `faster2` (`linksText`) ) ENGINE=InnoDB AUTO_INCREMENT=3029595 DEFAULT CHARSET=latin1;
这一个:
SELECT * FROM tbllinks order by linksLastChecked asc limit 9324;
需要0.094秒。 这一个:
SELECT * FROM tbllinks order by linksLastChecked asc limit 9325;
需要42.559秒。
两个查询只返回" Null" linksLastChecked列中的值(右边),但大多数数据集都有值。
数据集9325也没有什么特别之处。所以我真的不知道为什么只有一个数据集更长时间。
修改:
通过解释,它可以解释为什么需要这么长时间。
+----+-------------+----------+-------+---------------+------------+---------+------+------+-------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+----------+-------+---------------+------------+---------+------+------+-------+ | 1 | SIMPLE | tbllinks | index | NULL | fasterDate | 6 | NULL | 9324 | NULL | +----+-------------+----------+-------+---------------+------------+---------+------+------+-------+
+----+-------------+----------+------+---------------+------+---------+------+--------+----------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+----------+------+---------------+------+---------+------+--------+----------------+ | 1 | SIMPLE | tbllinks | ALL | NULL | NULL | NULL | NULL | 805031 | Using filesort | +----+-------------+----------+------+---------------+------+---------+------+--------+----------------+
第一个是使用索引键,第二个不是!但我还有一个问题,为什么第二个是没有805031行?
编辑:(答案)
好的,我甚至都会问。我只是用错误的问题搜索过。
在搜索" mysql时,不使用索引"我找到了这篇不错的文章
http://code.openark.org/blog/mysql/7-ways-to-convince-mysql-to-use-the-right-index
虽然USE INDEX
对我不起作用,但FORCE INDEX
有所帮助。