select * 与 select `colum`

2012-03-24 01:39:03 +08:00
 Tianpu
发现一次查询很多条数据,如造地图的时候在1000万的表一次查5万,反而是select `colum`快些
4767 次点击
所在节点    MySQL
13 条回复
Tianpu
2012-03-24 01:44:32 +08:00
收回上述言论 应该是这样子的
1000万表有11G大小 则5万有45M左右 一次处理这么大量的数据导致mysql通讯或者php部分处理过慢导致效果不佳 只取一个列 查询慢一点 数据量小的多 才造成这样的现象
leiz
2012-03-24 02:03:34 +08:00
@Tianpu 突然想起来,v2ex好像不太多关于mysql大数据的经验讨论。
一直对这方面还是比较有兴趣的。如果能有大牛分享这方面的经验,万分期待。
Tianpu
2012-03-24 02:46:55 +08:00
期待分享 我的数据库都很小 正需要大数据库的经验分享
ayanamist
2012-03-24 10:00:16 +08:00
用星号和用具体column名字在MySQL本地查询是一样的,column是查询星号的结果裁剪出来的。所以主要是网络传输数据量的差异。
chuck911
2012-03-24 10:03:27 +08:00
select id 比 select * 快
annielong
2012-03-24 11:07:32 +08:00
怎么说也是 select * 取回全部字段的所有值,而 select id 只取回id一个字段的所有值,肯定体积和速度不一样的
avatasia
2012-03-24 12:16:41 +08:00
这个是基本功啊, 一般都是不建议使用select *的, @ayanamist 你说话有依据么?
Tianpu
2012-03-24 19:22:30 +08:00
我用到的都是所有字段差不多用完那样子 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
2012-03-24 20:16:07 +08:00
索引万岁!
Tianpu
2012-03-25 14:29:09 +08:00
@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
2012-03-25 16:31:35 +08:00
海量非结构化数据,可以考虑不用数据库
Tianpu
2012-03-26 00:20:27 +08:00
@clowwindy 只用key查询 速度还是不错的 但加上任何条件就不行了

毕竟mysql部署成本极低 迁移到别的平台难免有这样那样的问题 我最多用到的才1.2亿条 mysql尚可满足需求
napoleonu
2012-03-26 11:25:55 +08:00
一般建议 select `colum` 而不是 select *,节约磁盘io和网络io。特别是磁盘io的因素。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/30446

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX