今天遇到一个很奇怪的事情,同样两个差不多数据的表,都拥有一个记录时间的字段:addtime int(10),并且也设定了为索引
A 表总数据量在 23W 条,表的总大小为: 700M ,其中索引大小 19M 。
B 表总数据量在 30W 条。表的总大小为: 30M ,其中索引大小为 11M 。
(两个表的时间内容差不多的。A表内容少于B表示因为 A表有时候会删除数据,导致不一致)。
我在两个表中分别运行下面的 SQL :
EXPLAIN SELECT * FROM A/B WHERE addtime BETWEEN 1451577600 AND 1473651217;
A 表,正常执行 addtime 索引。而且我搜索出来的范围达到 10W 条记录,依旧会走 addtime 索引。
B 表,不能正常执行 addtime 索引。除非查询结果只有到几万( 4W 以下)条时,才会走 addtime 索引。
为了验证是否和空间容量大小是否会影响索引的执行。我将 A 表大部分字段删掉了。大概占用空间低于 100M 时,上面的 SQL 就无法走 addtime 索引了。
现在问题是,表的空间容量大小也会影响索引的执行??
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.