首页   注册   登录
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
华为云
V2EX  ›  MySQL

高性能 MySQL 中索引的问题?

  •  
  •   zooo · 129 天前 · 1640 次点击
    这是一个创建于 129 天前的主题,其中的信息可能已经有所发展或是发生改变。

    CREATE TABLE People (
    last_name VARCHAR(50) NOT NULL,
    first_name VARCHAR(50) NOT NULL,
    dob DATE NOT NULL,
    gender ENUM('m', 'f') NOT NULL,
    KEY(last_name, first_name, dob)
    );
    EXPLAIN SELECT * FROM high_performance_mysql.People WHERE last_name LIKE 'J%';
    EXPLAIN SELECT * FROM high_performance_mysql.People WHERE last_name LIKE 'A%';
    为什么这两个查询语句,一个使用到了索引,一个没有使用索引? 仅仅就是 LIKE 后面改了
    16 回复  |  直到 2018-07-15 17:47:27 +08:00
        1
    zooo   129 天前
    执行结果:后一条,查询到了数据,没有使用索引,而前一条使用没有查询到数据,使用了索引。
        2
    haiyang416   129 天前 via Android
    看样子是覆盖索引相关的内容,需要确认两条查询里都是 last_name ?
        3
    zooo   129 天前
    @haiyang416 刚看了下,书上 说 : 如果一个索引包含(或者说覆盖)所有需要查询的字段的值,就称为覆盖索引。
    但我这里 查询 * 还包括了 gerder 字段,那就应该不是覆盖索引了吧?
        4
    haiyang416   129 天前 via Android
    @zooo 我的意思是检查下两条查询条件是不是都是 last_name,有没有 first_name,看是不是左前匹配。覆盖索引是说书的章节,估计记错了,请忽略。
        5
    pathbox   129 天前 via iPhone
    你数据是怎样的没有说
        6
    zooo   129 天前
    @pathbox 和数据量和数据内容有关系?不懂,求教
        7
    zooo   129 天前
    @haiyang416 查询条件都是 WHERE last_name
        8
    glacer   129 天前 via iPhone
    应该是你的数据里没有 A 开头的,我记得要是没有命中索引的数据,执行计划是显示全表的。
        9
    carlclone   129 天前 via Android   ♥ 1
    和数据量跟内容会有关系,涉及到优化器的东西,比如表太小直接就顺序查找,不走索引
        10
    eslizn   129 天前
    不存在的,看看你的 Extra
        11
    Raymon111111   129 天前   ♥ 1
    区分度的问题

    比如你数据库里几乎所有的数据都 A****, 那走不走 A 这个索引对查询几乎毫无帮助, 那么就会直接判定不走这个索引了
        12
    zooo   129 天前
    @glacer A 开头的有 8 条,没有走索引,而 J 开头的没有数据,走索引了。

    @Raymon111111 嗯,之前也有人这么说,那应该是这样了,A***数据占数据表大部分,所以就不用走索引的
        13
    Raymon111111   129 天前
    @zooo 数据太少了, 至少几万再想索引的事吧
        14
    zooo   129 天前
        15
    zooo   129 天前
    谢谢各位回答
        16
    xiaoxlm   128 天前
    查询优化器会根据数据量判断要不要用索引
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2190 人在线   最高记录 3821   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 20ms · UTC 15:12 · PVG 23:12 · LAX 07:12 · JFK 10:12
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1