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

mysql select * 与 select 具体字段 到底哪个快?

  •  1
     
  •   tinyTot · Dec 9, 2021 · 5202 views
    This topic created in 1750 days ago, the information mentioned may be changed or developed.

    mysql select * 与 select 具体字段 到底哪个快?自己测试的时候都是 select * 快

    Supplement 1  ·  Dec 10, 2021
    1 、order by created_at 与 order by id
    http://tva1.sinaimg.cn/large/0061WS1kly1gx8vyymc6zj31b0030dgm.jpg
    http://tva1.sinaimg.cn/large/0061WS1kly1gx8w0ezqq6j31f80300tp.jpg

    2 、select * 与 select 字段 (同样 order by id)
    http://tva1.sinaimg.cn/large/0061WS1kly1gx8vyymc6zj31b0030dgm.jpg

    没有区别

    最终优化结果:order by created_at 改为 order by id; select * 改为 select 具体字段

    感谢各位大佬。
    19 replies  •  2021-12-09 21:07:38 +08:00
    Alchemistboy
        1
    Alchemistboy  
       Dec 9, 2021
    你的 [具体字段] 如果有索引,where 里面用这个索引查询,不用回表,会更快
    zxxufo008
        2
    zxxufo008  
       Dec 9, 2021
    你测试的数据量有多少呢,字段有多少个呢?
    labulaka521
        3
    labulaka521  
       Dec 9, 2021
    这要看索引吧
    tinyTot
        4
    tinyTot  
    OP
       Dec 9, 2021
    字段一共 15 个; 数据量 80 万左右; sql 里面只有主键索引;
    order by id 不如 order by created_at 快
    select * 比 select 具体字段快
    不知道是不是 select * mysql 有相关查询缓存的原因

    SELECT `id`, `no`, `amount`, `type`, `note`, `created_at` FROM `charge` WHERE `uid` = 11 ORDER BY `created_at` DESC LIMIT 15 OFFSET 0;

    SELECT * `charge` WHERE `uid` = 11 ORDER BY `id` DESC LIMIT 15 OFFSET 0;
    westoy
        5
    westoy  
       Dec 9, 2021
    原则上肯定是后面那个啊, 后面那个就算不走索引, 前面那个也包含了这些无索引的字段, 一样快不了的

    但是如果每次查询的字段不一样,但是都只是差在小字段上, 前面那个命中 query cache 的概率更高一点, 这样反而会反杀后面那个
    tinyTot
        6
    tinyTot  
    OP
       Dec 9, 2021
    show variables like '%query_cache%';

    have_query_cache YES
    query_cache_limit 1048576
    query_cache_min_res_unit 4096
    query_cache_size 0
    query_cache_type OFF
    query_cache_wlock_invalidate OFF



    show status like 'Qcache%';

    Qcache_free_blocks 0
    Qcache_free_memory 0
    Qcache_hits 0
    Qcache_inserts 0
    Qcache_lowmem_prunes 0
    Qcache_not_cached 5036
    Qcache_queries_in_cache 0
    Qcache_total_blocks 0
    cheng6563
        7
    cheng6563  
       Dec 9, 2021
    请问 select * 和 SELECT * 哪个块?
    tinyTot
        8
    tinyTot  
    OP
       Dec 9, 2021
    1 、指定的 uid 数据量在 300 条时,经常查询的一个用户,指定字段的速度=0.122; * 的速度=0.217
    1 、指定的 uid 数据量在 300 条时,不经常查询的一个用户,指定字段的速度=0.311; * 的速度=0.210
    2 、指定的 uid 数据量在小于 15 条时,不经常查询的一个用户,指定字段的速度=0.456; * 的速度=0.217

    在增加 uid 的索引后,两条 sql 查询时间 大致都在 0.02x

    考虑到还有网络传输,最终决定还是指定字段查询

    不过对于这个问题还是有点疑惑
    weizhen199
        9
    weizhen199  
       Dec 9, 2021
    select 某个字段恒<= select * 的速度
    qq1340691923
        10
    qq1340691923  
       Dec 9, 2021
    列式存储数据库就可以看出明显差异了
    MonkeyJon
        11
    MonkeyJon  
       Dec 9, 2021
    explain 你的 sql ,分析执行计划,看用到的索引和查询条数
    weizhen199
        12
    weizhen199  
       Dec 9, 2021
    @qq1340691923 数据结构不一样,这两个放在一起比较很不公平的
    onhao
        13
    onhao  
       Dec 9, 2021
    select 具体字段
    不接受反驳!

    #8 还要考虑到返回的数据量 ,还有就是 * 和具体字段 ,执行速度(时间)要排除缓存的因素,在数据量大的情况下最好是指定字段 ,如果是单条数据 ,无所谓

    mysql 函数的应用 不知楼主有兴趣了解下不 https://wuhao.pw/archives/277/
    @tinyTot
    tabris17
        14
    tabris17  
       Dec 9, 2021
    select 具体字段比 select *只快不慢
    如果覆盖索引速度会非常快
    xsm1890
        15
    xsm1890  
       Dec 9, 2021   ❤️ 1
    select 字符按和 select * 在查询过程的主要区别在于数据页加再到内存后到返回客户端间的这段时间的区别;即为网络传输时间和决定具体返回的数据的时间之和的差别。网络传输毫无疑问 select *>=select 字段;由于数据页的结构是一个 稀疏目录,只能顺序查找,所以根据返回的具体数据的区别,select *所需的时间可能更快(返回整页数据的时候)也可能 能更慢。
    所以具体谁更快?还真不好说。
    RedBeanIce
        16
    RedBeanIce  
       Dec 9, 2021 via iPhone
    请了解 explain ,覆盖索引,以及 sql 代码*和字段的兼容性
    akira
        17
    akira  
       Dec 9, 2021
    字段数量少,总长小的时候 没啥区别。 字段数量或者总长度上去以后,select * 能让你怀疑人生
    akira
        18
    akira  
       Dec 9, 2021
    另外,select 具体字段 应该是规范要求,一般开发都不会允许使用 select *的吧
    msaionyc
        19
    msaionyc  
       Dec 9, 2021 via iPhone
    去学下索引吧,不然大家说再多你也还是听不明白
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2392 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 05:55 · PVG 13:55 · LAX 22:55 · JFK 01:55
    ♥ Do have faith in what you're doing.