mysql 大数据表如何查询不重复字段记录
数据库为MySQL--MyISAM
数据表有如下字段:
id, item_id, item_pic, item_title, shop_nick, biz30day, comment_count, shop_url, rebate, price, commission_rate, commission, spread30day, commission30day, key_id, create_time
!!!想要查询 item_id不相同 按销量倒序排序的 所有商品数据
select
item_id
,
item_pic
,
shop_nick
,
item_title
,
biz30day
,
price
, count(distinct
item_id
) from key_alimama_items group by
item_id
ORDER BY
key_alimama_items
.
biz30day
DESC
查询时间太长了 超过五秒
现在零时用的sql语句(取biz30day销量大于5000的):
select
item_id
,
item_pic
,
shop_nick
,
item_title
,
biz30day
,
price
, count(distinct
item_id
) from key_alimama_items where biz30day>5000 group by
item_id
ORDER BY
key_alimama_items
.
biz30day
DESC
执行时间约0.2~1.2秒
但是有如下缺陷 如果单类商品 最大销量的商品都小于5000就取不到数据
或者月初销量清零从新计算也取不到数据
在网上找了很多其他查询语句 要么是数据库直接卡死奔溃 要么就是超过十秒。
希望德问的技术达人帮忙解决 这个效率问题。
Answers
select item_id,item_pic,shop_nick,item_title,biz30day, price, count(distinct item_id)
from key_alimama_items
group by item_id
ORDER BY key_alimama_items.biz30day DESC
我的看法, 首先楼主你需要仔细验证一下你的sql.
1). 你用item_id分组, 然后select里, item_pic,shop_nick,item_title,biz30day, price这些字段都不在 聚集函数里面; 这个在标准sql里是不允许的; mysql通过group by extension可以这么做, 但不知道是不是你想要的结果.
2). 用item_id分组后, select里的count(distinct item_id) 非常诡异啊, hmm... 返回一定是1吧.
至于为什么sql慢, 我想主要在group by, order by上, explain应该会看到Using temporary; Using filesort; 你也可以show profile看一下
http://dev.mysql.com/doc/refman/5.5/en/show-profile.html