如何快速使这个mysql查询?我的表格中有数百万个数据

时间:2016-08-10 06:36:47

标签: php mysql

我有一个名为ad_view的表,它在该表中有1890万个数据。

这是ad_vew

的表格设计
ad_view
-------
ad_id
network_id
publisher_id
landingpage_id
advertiser_id

我正在使用此查询获取ad_idad_id的计数,具体取决于network_id,因此在这种情况下,network_id4

select ad_id,count(ad_id) as strength 
from ad_view 
where network_id = 4 
group by ad_id 
order by strength desc 
limit 10

此查询需要永远加载。您有什么建议如何快速进行此查询?

我不是数据库专家,如果需要重新设计此表,我会这样做。

任何建议都将不胜感激,谢谢!

2 个答案:

答案 0 :(得分:3)

这会有所帮助:

ALTER TABLE ad_view ADD INDEX (network_id, ad_id).

确保您已调整innodb_buffer_pool_size以将桌面中经常请求的部分保存在内存中。

您可能会喜欢我的演示文稿How to Design Indexes, Really。该演示文稿不会用于GROUP BY的索引编制,但您可以将其视为范围条件。

答案 1 :(得分:3)

1 network_id上创建索引,因为您正在搜索

ALTER TABLE `ad_view`  ADD INDEX (`network_id`);

2 如果您尝试获得给定ad_id的{​​{1}}计数,为什么结果中需要network_id?为什么需要ad_id?我不明白这一点。如果您想要的只是 network_id 4 的ad_ids数量,那么请执行以下操作:

order by

它只返回一个数字。见this demo

PS:您的初始帖子中包含一个损坏的查询(在SELECT COUNT(IF(network_id=4,1,null)) as strength from ad_view 子句中),您在我发表评论后对其进行了更改。您当前的查询仍然无法提供您想要的内容。我刚试了on this fiddle