我有一个超过 15m 行的表。我需要总行数。所以:
SELECT COUNT(*) FROM thetable;
Run Code Online (Sandbox Code Playgroud)
大约需要 50 秒才能完成。解释给了我Select tables optimized away。我想这意味着只有使用索引才能找到结果,那为什么还需要这么长时间?以下是有关id列上索引的一些信息(不可为空):
索引类型:BTREE(聚集)
基数:14623100
唯一:是
如何提高此查询的性能?谢谢。
注:数据库为 MySQL 5.7.1,使用 InnoDB 引擎。
编辑:
创建语句:
CREATE TABLE `properties` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`address` varchar(255) DEFAULT NULL,
`locality` varchar(50) DEFAULT NULL,
`latitude` decimal(13,9) DEFAULT NULL,
`longitude` decimal(13,9) DEFAULT NULL,
`state` varchar(10) DEFAULT NULL,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
.....
PRIMARY KEY (`id`),
KEY `index_properties_on_address` (`address`),
KEY `index_properties_on_latitude` (`latitude`),
KEY `index_properties_on_longitude` (`longitude`),
KEY `index_properties_on_state` …Run Code Online (Sandbox Code Playgroud)