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

select * 与 select `colum`

  •  
  •   Tianpu · Mar 24, 2012 · 5810 views
    This topic created in 5322 days ago, the information mentioned may be changed or developed.
    发现一次查询很多条数据,如造地图的时候在1000万的表一次查5万,反而是select `colum`快些
    13 replies  •  1970-01-01 08:00:00 +08:00
    Tianpu
        1
    Tianpu  
    OP
       Mar 24, 2012
    收回上述言论 应该是这样子的
    1000万表有11G大小 则5万有45M左右 一次处理这么大量的数据导致mysql通讯或者php部分处理过慢导致效果不佳 只取一个列 查询慢一点 数据量小的多 才造成这样的现象
    leiz
        2
    leiz  
       Mar 24, 2012
    @Tianpu 突然想起来,v2ex好像不太多关于mysql大数据的经验讨论。
    一直对这方面还是比较有兴趣的。如果能有大牛分享这方面的经验,万分期待。
    Tianpu
        3
    Tianpu  
    OP
       Mar 24, 2012
    期待分享 我的数据库都很小 正需要大数据库的经验分享
    ayanamist
        4
    ayanamist  
       Mar 24, 2012
    用星号和用具体column名字在MySQL本地查询是一样的,column是查询星号的结果裁剪出来的。所以主要是网络传输数据量的差异。
    chuck911
        5
    chuck911  
       Mar 24, 2012
    select id 比 select * 快
    annielong
        6
    annielong  
       Mar 24, 2012
    怎么说也是 select * 取回全部字段的所有值,而 select id 只取回id一个字段的所有值,肯定体积和速度不一样的
    avatasia
        7
    avatasia  
       Mar 24, 2012
    这个是基本功啊, 一般都是不建议使用select *的, @ayanamist 你说话有依据么?
    Tianpu
        8
    Tianpu  
    OP
       Mar 24, 2012
    我用到的都是所有字段差不多用完那样子 select * 查询分析器应该没问题吧

    http://stackoverflow.com/questions/3639861/why-is-select-considered-harmful


    对select * 这么有信心, 应该是select count(*)以前感觉比较快
    http://stackoverflow.com/questions/8221729/mysql-select-count-or-select-1-pdo

    所有这些我会在玩些时候测试个150万的样本看下

    以便彻底解决掉这个问题
    Johnny
        9
    Johnny  
       Mar 24, 2012
    索引万岁!
    Tianpu
        10
    Tianpu  
    OP
       Mar 25, 2012
    @avatasia @leiz

    Table:
    id primary
    abbr unique 96
    name string 128
    meta string 512

    1610000行数据

    select count(`column`) as `count` from `table` limit 1234567,18;
    select count(1) as `count` from `table` limit 1234567,18;
    select count(*) as `count` from `table` limit 1234567,18;

    1最慢,2 3 基本一样的速度

    slect * from `table` limit 1234567,18;
    slect `id`,`abbr` from `table` limit 1234567,18;
    slect `id`,`abbr`,`name`,`meta` from `table` limit 1234567,18;

    2大约是1 3的0.6时间
    1 3 没有明显差异

    应该就是stackoverflow的说法,如果超过2/3字段需要用到 那就使用*好了 如果不是考虑指定字段

    不指定任何查询条件 where 1与空where没有观察到差别

    话说回来 只查ID的情况数据比较多可以考虑ID和别的关系单独做个表 那样更快些 反倒是空条件数据比较多是个麻烦 limit a,b还是不够快

    因此我觉得除非需要的字段很少或者数据量大的足以阻塞通信 * 永远是个不错的选择
    clowwindy
        11
    clowwindy  
       Mar 25, 2012
    海量非结构化数据,可以考虑不用数据库
    Tianpu
        12
    Tianpu  
    OP
       Mar 26, 2012
    @clowwindy 只用key查询 速度还是不错的 但加上任何条件就不行了

    毕竟mysql部署成本极低 迁移到别的平台难免有这样那样的问题 我最多用到的才1.2亿条 mysql尚可满足需求
    napoleonu
        13
    napoleonu  
       Mar 26, 2012
    一般建议 select `colum` 而不是 select *,节约磁盘io和网络io。特别是磁盘io的因素。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1381 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 16:54 · PVG 00:54 · LAX 09:54 · JFK 12:54
    ♥ Do have faith in what you're doing.