小编use*_*671的帖子

SQL查询:加快大型表的速度

我们有一个包含大约25,000,000行的表,称为'events',具有以下模式:

TABLE events
- campaign_id   : int(10)
- city      : varchar(60)
- country_code  : varchar(2)
Run Code Online (Sandbox Code Playgroud)

以下查询需要很长时间(> 2000秒):

SELECT COUNT(*) AS counted_events, country_code
FROM events
WHERE campaign_id` in (597) 
GROUPY BY city, country_code
ORDER BY counted_events
Run Code Online (Sandbox Code Playgroud)

我们发现这是因为GROUP BY部分原因.

已经使用了索引idx_campaign_id_city_country_code (campaign_id, city, country_code).

也许有人可以提出一个很好的解决方案来加速它?

更新:

'Explain'表明,在许多可能的索引中,MySql使用了这个:'idx_campaign_id_city_country_code',对于它显示的行:'471304'和'Extra'它显示:'使用where; 使用临时; 使用filesort' -

这是EXPLAIN的整个结果:

  • id:'1'
  • select_type:'SIMPLE'
  • 表:'事件'
  • 输入:'ref'
  • possible_keys:'index_campaign,idx_campaignid_paid,idx_city_country_code,idx_city_country_code_campaign_id,idx_cid,idx_campaign_id_city_country_code'
  • key:'idx_campaign_id_city_country_code'
  • key_len:'4'
  • ref:'const'
  • 行:'471304'
  • 额外:'使用地点; 使用临时; 使用filesort'

更新:

好的,我认为它已经解决了:

再次查看粘贴的查询,我意识到我忘记在这里提到SELECT中还有一个名为'country_name'的列.所以查询非常慢(包括country_name),但我只是把它留下来,现在查询的性能绝对可以.抱歉,这个错误!

非常感谢您的所有有用的评论,我会提供所有好的答案!有一些非常有用的补充,我可能也应用(如改变类型等).

mysql sql database indexing performance

5
推荐指数
1
解决办法
778
查看次数

标签 统计

database ×1

indexing ×1

mysql ×1

performance ×1

sql ×1