1
Tianpu OP 收回上述言论 应该是这样子的
1000万表有11G大小 则5万有45M左右 一次处理这么大量的数据导致mysql通讯或者php部分处理过慢导致效果不佳 只取一个列 查询慢一点 数据量小的多 才造成这样的现象 |
2
leiz 2012-03-24 02:03:34 +08:00
@Tianpu 突然想起来,v2ex好像不太多关于mysql大数据的经验讨论。
一直对这方面还是比较有兴趣的。如果能有大牛分享这方面的经验,万分期待。 |
3
Tianpu OP 期待分享 我的数据库都很小 正需要大数据库的经验分享
|
4
ayanamist 2012-03-24 10:00:16 +08:00
用星号和用具体column名字在MySQL本地查询是一样的,column是查询星号的结果裁剪出来的。所以主要是网络传输数据量的差异。
|
5
chuck911 2012-03-24 10:03:27 +08:00
select id 比 select * 快
|
6
annielong 2012-03-24 11:07:32 +08:00
怎么说也是 select * 取回全部字段的所有值,而 select id 只取回id一个字段的所有值,肯定体积和速度不一样的
|
8
Tianpu OP 我用到的都是所有字段差不多用完那样子 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万的样本看下 以便彻底解决掉这个问题 |
9
Johnny 2012-03-24 20:16:07 +08:00
索引万岁!
|
10
Tianpu OP @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还是不够快 因此我觉得除非需要的字段很少或者数据量大的足以阻塞通信 * 永远是个不错的选择 |
11
clowwindy 2012-03-25 16:31:35 +08:00
海量非结构化数据,可以考虑不用数据库
|
12
Tianpu OP |
13
napoleonu 2012-03-26 11:25:55 +08:00
一般建议 select `colum` 而不是 select *,节约磁盘io和网络io。特别是磁盘io的因素。
|