gpt4 book ai didi

mysql - SQL 查询 : Speed up for huge tables

转载 作者:可可西里 更新时间:2023-11-01 07:07:02 26 4
gpt4 key购买 nike

我们有一个包含大约 25,000,000 行的表,称为“事件”,具有以下架构:

TABLE events
- campaign_id : int(10)
- city : varchar(60)
- country_code : varchar(2)

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

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

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

(campaign_id, city, country_code) 上已经有索引 idx_campaign_id_city_country_code 被使用。

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

更新:

'Explain' 显示在许多可能的索引中,MySql 使用了这个:'idx_campaign_id_city_country_code',对于它显示的行:'471304',对于'Extra',它显示:'Using where;使用临时的;使用文件排序' –

这里是 EXPLAIN 的全部结果:

  • id: '1'
  • select_type: '简单'
  • 表:“事件”
  • 类型:“引用”
  • 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'
  • 键:“idx_campaign_id_city_country_code”
  • key_len: '4'
  • ref: '常量'
  • 行:'471304'
  • 额外:'使用哪里;使用临时的;使用文件排序'

更新:

好的,我想已经解决了:

再次查看此处粘贴的查询,我意识到我忘记在这里提及 SELECT 中还有一个名为“country_name”的列。所以当时查询速度非常慢(包括 country_name),但我将其排除在外,现在查询的性能绝对没问题。对不起那个错误!

非常感谢您提供的所有有用评论,我会为所有好的答案投赞成票!有一些非常有用的补充,我可能也会应用(例如更改类型等)。

最佳答案

无论如何,没有看到 EXPLAIN 所说的远距离射击:

  1. 在(城市,国家/地区代码)上建立索引
  2. 看看有没有办法使用分区,你的表越来越大了
  3. 如果国家代码总是 2 个字符,将其更改为 char
  4. 将数字索引更改为 unsigned int

发布整个 EXPLAIN 输出

关于mysql - SQL 查询 : Speed up for huge tables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30185842/

26 4 0