V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
Felldeadbird
V2EX  ›  MySQL

MYSQL 范围搜索时,表的空间容量大小会影响索引的执行?

  •  
  •   Felldeadbird · 2016-09-12 13:57:48 +08:00 · 2497 次点击
    这是一个创建于 2983 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天遇到一个很奇怪的事情,同样两个差不多数据的表,都拥有一个记录时间的字段: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 索引了。

    现在问题是,表的空间容量大小也会影响索引的执行??

    5 条回复    2016-09-12 17:01:07 +08:00
    DRcoding
        1
    DRcoding  
       2016-09-12 14:32:47 +08:00   ❤️ 1
    表的空间空间大小会影响所有的表查询, A 表 700M ,还是 optimize table 下吧,至于何时使用索引何时不适用索引,主要是你的 between 语句范围的问题吧。
    liprais
        2
    liprais  
       2016-09-12 14:34:11 +08:00   ❤️ 1
    https://dev.mysql.com/doc/internals/en/optimizer-tracing.html
    先 trace 一下看看到底发生了什么
    akira
        3
    akira  
       2016-09-12 14:34:49 +08:00   ❤️ 1
    是的,数据库引擎会智能判断使用哪个索引或者是直接全表。类似你这个例子,使用索引并没有很好的过滤结果集,会认为不如直接全表扫描。

    如果你觉得他判断有误,可以通过使用 use index 来强制
    wupher
        4
    wupher  
       2016-09-12 16:16:38 +08:00   ❤️ 1
    如 @akira 所言, MySQL 会决定要不要使用索引,所以会出现这种有索引但是仍然全表扫的情况。
    ten789
        5
    ten789  
       2016-09-12 17:01:07 +08:00
    一共只有 30m 的表 难道要先用索引扫一遍然后再去表里抽数据么 直接把表装内存全表扫多好
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1549 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 00:00 · PVG 08:00 · LAX 16:00 · JFK 19:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.