我正在使用HeidiSQL分析一些查询的性能,我遇到过这种情况:我发现EXPLAIN命令返回的行数与表中包含的行不同。
查询:
EXPLAIN SELECT count(1)FROM Dummy;结果:
EXPLAIN SELECT * FROM Dummy;结果:
SELECT count(1)FROM Dummy;结果: 2195
我也使用了命令
select field1 count(\*)
from table\_name
group by field1
having count(\*) > 1
表格的键(f2和f3),它没有给f3重复。对于f2,它返回的是某些行有115,53,565,82,35,37,314,196,41,118,76,29,158,68和308重复,但这里没有任何错误。
该表由此定义:
CREATE TABLE Dummy(
`f1` INT(11) NULL DEFAULT NULL,
`f2` INT(11) NULL DEFAULT NULL,
`f3` INT(11) NULL DEFAULT NULL,
`f4` VARCHAR(254) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
`f5` VARCHAR(254) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
`f6` VARCHAR(8) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
`f7` DATETIME NULL DEFAULT NULL,
`f8` BIGINT(20) NULL DEFAULT NULL,
`f9` BIGINT(20) NULL DEFAULT NULL,
`f10` DATETIME NULL DEFAULT NULL,
`f11` DATETIME NULL DEFAULT NULL,
`f12` BIGINT(20) NULL DEFAULT NULL,
`f13` DOUBLE NULL DEFAULT NULL,
`f14` INT(11) NULL DEFAULT NULL,
`f15` INT(11) NULL DEFAULT NULL
INDEX `idxF2F3` (`f2`, `f3`)
)
COLLATE='utf8_unicode_ci'
ENGINE=InnoDB
;
有任何帮助吗?我搜索过任何类似的问题
答案 0 :(得分:0)
EXPLAIN
操作揭示了查询规划器中的一些逻辑。查询计划程序使用表统计信息来确定如何满足查询,而不是原始数据本身。
表统计信息可能已过期,尤其是在活动或最近更改的数据库中。
您可以使用ANALYZE TABLE命令使统计信息保持最新。在您的情况下,您将发出此命令
ANALYZE TABLE Dummy;
获取最新统计数据。
专业提示:不要担心这种小差异,除非是在大量上传表格数据之后,或者在TRUNCATE TABLE
操作之后。