› 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 · Sep 12, 2016 · 3538 views
    This topic created in 3665 days ago, the information mentioned may be changed or developed.

    今天遇到一个很奇怪的事情,同样两个差不多数据的表,都拥有一个记录时间的字段: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 replies  •  2016-09-12 17:01:07 +08:00
    DRcoding
        1
    DRcoding  
       Sep 12, 2016   ❤️ 1
    表的空间空间大小会影响所有的表查询, A 表 700M ,还是 optimize table 下吧,至于何时使用索引何时不适用索引,主要是你的 between 语句范围的问题吧。
    F281M6Dh8DXpD1g2
        2
    F281M6Dh8DXpD1g2  
       Sep 12, 2016   ❤️ 1
    https://dev.mysql.com/doc/internals/en/optimizer-tracing.html
    先 trace 一下看看到底发生了什么
    akira
        3
    akira  
       Sep 12, 2016   ❤️ 1
    是的,数据库引擎会智能判断使用哪个索引或者是直接全表。类似你这个例子,使用索引并没有很好的过滤结果集,会认为不如直接全表扫描。

    如果你觉得他判断有误,可以通过使用 use index 来强制
    wupher
        4
    wupher  
       Sep 12, 2016   ❤️ 1
    如 @akira 所言, MySQL 会决定要不要使用索引,所以会出现这种有索引但是仍然全表扫的情况。
    ten789
        5
    ten789  
       Sep 12, 2016
    一共只有 30m 的表 难道要先用索引扫一遍然后再去表里抽数据么 直接把表装内存全表扫多好
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2518 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 09:37 · PVG 17:37 · LAX 02:37 · JFK 05:37
    ♥ Do have faith in what you're doing.