首頁  >  問答  >  主體

mysql - select count(1) 统计太慢,怎么优化?

我有一张表400w+数据,单表查询都很慢,当关联时就更慢了。 请问还有什么可以优化的方法吗?

mysql> select count(1) from test;
count(1)
+----------+
4429754

1 row in set (1.39 sec)

单表统计需要这么长时间。按时间段查询,也一样很慢。

mysql> select count(1) from test f where f.createdDate >= '2015-01-01 00:00:00' and f.createdDate <= '2015-12-15 23:59:59';
count(1)
+----------+
2584387

1 row in set (1.08 sec)

createdDate是datetime类型,我按年份分区过。
ALTER TABLE test PARTITION BY RANGE(to_days(createdDate))(
PARTITION p20120101 VALUES LESS THAN (to_days('2012-01-01 00:00:00')),
PARTITION p20130101 VALUES LESS THAN (to_days('2013-01-01 00:00:00')),
PARTITION p20140101 VALUES LESS THAN (to_days('2014-01-01 00:00:00')),
PARTITION p20150101 VALUES LESS THAN (to_days('2015-01-01 00:00:00')),
PARTITION p20160101 VALUES LESS THAN (to_days('2016-01-01 00:00:00')),
PARTITION p20170101 VALUES LESS THAN (to_days('2017-01-01 00:00:00'))
);

请问还有什么可以优化的吗?

高洛峰高洛峰2742 天前1137

全部回覆(1)我來回復

  • 巴扎黑

    巴扎黑2017-04-17 13:37:16

    你的表按年進行分區,查詢時間條件也是一整年,這樣雖然走了分區但是這一個分區的數據還是比較多.
    你的查詢業務需要有這麼大的跨度嗎? 是否按照你實際的查詢跨度來優化一下分區方式?
    如果確實有大量數據而且是存量數據,可以考慮直接把一些維度統計好放在數據庫,後期查詢直接查詢結果,不再動態統計.

    回覆
    0
  • 取消回覆