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
biocom
V2EX  ›  MySQL

整数 int 类型的数据(如订单号)有必要加索引吗?

  •  
  •   biocom · 2017-07-17 18:38:31 +08:00 · 9192 次点击
    这是一个创建于 2670 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如 订单编号,都是纯数字 int 类型,有必要加索引吗?加索引会增加查询速度吗?
    25 条回复    2017-07-18 13:38:11 +08:00
    wdd2007
        1
    wdd2007  
       2017-07-17 18:44:58 +08:00   ❤️ 1
    会。
    BadMan
        2
    BadMan  
       2017-07-17 18:46:00 +08:00   ❤️ 1
    这不是最适合当索引主键的情况吗
    biocom
        3
    biocom  
    OP
       2017-07-17 19:02:04 +08:00
    @BadMan 主键是自增的,订单号为了不让外人看出规律,把数字做了乱序混淆。
    maemual
        4
    maemual  
       2017-07-17 19:05:01 +08:00   ❤️ 1
    如果你有根据订单号查询的需求,加索引不就是必然的了么。
    l1093178
        5
    l1093178  
       2017-07-17 19:32:19 +08:00   ❤️ 1
    通常来说根据集合的 cardinality 来决定要不要加索引比较好
    akira
        6
    akira  
       2017-07-17 19:55:15 +08:00
    数字类型本身并不会在查询的时候有特别的优化
    biocom
        7
    biocom  
    OP
       2017-07-17 20:07:22 +08:00
    @BadMan
    @maemual
    @akira

    貌似大家意见相反?整数 int 类型,加索引会不会提高查询速度的?
    scriptB0y
        8
    scriptB0y  
       2017-07-17 20:12:36 +08:00   ❤️ 1
    @biocom btree 不正好可以给 int 排序索引吗?

    <iframe width="560" height="315" src="https://www.youtube.com/embed/coRJrcIYbF4" frameborder="0" allowfullscreen></iframe>
    scriptB0y
        9
    scriptB0y  
       2017-07-17 20:12:52 +08:00
    iyaozhen
        10
    iyaozhen  
       2017-07-17 20:14:03 +08:00 via Android   ❤️ 1
    和类型没啥关系吧。你要通过这个字段来库里查数据,就要加索引,快的不是一点点。
    mkeith
        11
    mkeith  
       2017-07-17 21:00:12 +08:00 via iPhone
    订单号不加唯一键索引吗?
    honeycomb
        12
    honeycomb  
       2017-07-17 21:22:12 +08:00   ❤️ 1
    如果要通过订单编号来查订单,那要加。
    如果不需要,那就不加。
    pynix
        13
    pynix  
       2017-07-17 21:28:12 +08:00
    PK 自动索引了吧。。。
    gamexg
        14
    gamexg  
       2017-07-17 21:53:30 +08:00   ❤️ 1
    你会不会根据订单号查订单?
    如果会的话就需要加索引,否则全表扫描耗时就大了。
    swulling
        15
    swulling  
       2017-07-17 23:04:25 +08:00 via iPhone   ❤️ 1
    @biocom 这个楼里面除了你以外其他人的意见都是一致的……
    0915240
        16
    0915240  
       2017-07-18 00:17:25 +08:00   ❤️ 1
    肯定需要加啊
    msg7086
        17
    msg7086  
       2017-07-18 00:56:43 +08:00   ❤️ 1
    @biocom 并没有相反啊,大家意见一样。
    msg7086
        18
    msg7086  
       2017-07-18 00:57:42 +08:00
    > 加索引会不会提高查询速度的?



    > 整数 int 类型会不会提高查询速度的?

    不会
    akira
        19
    akira  
       2017-07-18 02:05:21 +08:00   ❤️ 1
    @biocom 我的表述让你误会了。
    你的问题描述,对索引的理解有偏差。 是否需要加索引,不是由字段的类型来决定的,而是看你实际查询语句 来具体分析的。 回到你的问题,如果是订单号 这种重复率低,业务有大量查询需求的字段,基本上就是典型的必须做索引的字段了,不管你订单号字段是字符串还是数字。

    回过来说,如果一个使用 0,1 表示男女的数字字段,字段类型也是数字,但是这种字段基本上不会做索引的, 做了索引,也不会对查询效率有任何帮助。
    haython
        20
    haython  
       2017-07-18 09:18:41 +08:00
    MySQL 的话,自己使用 EXPLAIN 看一下就行了啊,反正我测试订单号这种场景加索引是非常有用的
    wangdu2012
        21
    wangdu2012  
       2017-07-18 09:19:49 +08:00 via iPhone   ❤️ 1
    去学习一下索引的原理就好了。在这里问,不少人就是瞎 bb
    jianzhiyao020
        22
    jianzhiyao020  
       2017-07-18 09:41:50 +08:00
    [写了三年代码才知道 mysql 索引这样用]( http://www.jianshu.com/p/d08f16867012)
    game3108
        23
    game3108  
       2017-07-18 11:17:01 +08:00
    主键 不是自带索引么。。。。。。。。难道我记错了?
    Hozzz
        24
    Hozzz  
       2017-07-18 11:47:35 +08:00
    难道不是先看键值唯一度+数据行数再来判断是否需要增加索引吗?
    ZhLTE
        25
    ZhLTE  
       2017-07-18 13:38:11 +08:00
    <span style="color:yellow">加</span>
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3023 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 13:22 · PVG 21:22 · LAX 05:22 · JFK 08:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.