单表数据行数达到2000w级别,如何做查询优化,是否有更好的数据存储推荐?
此表为用户活跃表,按月份进行了分表,单表数据行数大概在 2000w 左右,需要根据用户标识进行去重然后统计。
下面是一张 1000w 左右的表的查询结果,SQL 语句如下:
select count(distinct open_id) from user_behavior_logs_202108 where log_date BETWEEN 20210805 and 20210825;
查询时间:26.09s
Explain 结果如下:
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | SIMPLE | user_behavior_logs_202108 | (NULL) | ALL | idx_open_id,idx_log_date | (NULL) | (NULL) | (NULL) | 9739837 | 11.11 | Using where |
1000w 就查询这么慢了。
尝试通过group by 替换 distinct,然后 count(*),但是没啥效果,依旧那么慢。
听说 pgsql 性能会好一些,也尝试了 pgsql 对 2000w 的查询效率,耗时也在30s+了。
想请问有没有哪位大神碰到过类似的场景,是如何进行查询优化的,或是有更好的数据存储推荐。
期待大家一起讨论😜
关于 LearnKu
推荐文章: