当前位置:首页>开发>正文

mysql中按时间段查询 mysql数据库千万级得表一下查询超时怎么优化

2023-05-22 10:55:37 互联网 未知 开发

 mysql中按时间段查询 mysql数据库千万级得表一下查询超时怎么优化

mysql中按时间段查询

你的要求是 2010-7-12 11:18:54 到 2010-7-12 11:22:20 之间的
显然2010-7-12 11:18:46 和 2010-7-12 11:22:22不在二者之间,为什么要包含在结果集内?
我也附议楼上三位
select sum(csize) from table where cdtime between 2010-7-12 11:18:54 and 2010-7-12 11:22:20
--------------------------------------------
那如果表里再多一行 2010-7-12 11:22:21, 结果集是6个还是5个?
这显然属于你的描述出了问题
--------------------------------------------
很遗憾,请给出更清晰的描述
即使用你的嵌套查询,结果集也会是5,不会是6

mysql数据库千万级得表一下查询超时怎么优化?

第一优化你的sql和索引;
第二加缓存,memcached,redis;
第三以上都做了后,还是慢,就做主从复制或主主复制,读写分离,可以在应用层做,效率高,也可以用三方工具,第三方工具推荐360的atlas,其它的要么效率不高,要么没人维护;
第四如果以上都做了还是慢,不要想着去做切分,mysql自带分区表,先试试这个,对你的应用是透明的,无需更改代码,但是sql语句是需要针对分区表做优化的,sql条件中要带上分区条件的列,从而使查询定位到少量的分区上,否则就会扫描全部分区,另外分区表还有一些坑,在这里就不多说了;
第五如果以上都做了,那就先做垂直拆分,其实就是根据你模块的耦合度,将一个大的系统分为多个小的系统,也就是分布式系统;
第六才是水平切分,针对数据量大的表,这一步最麻烦,最能考验技术水平,要选择一个合理的sharding key,为了有好的查询效率,表结构也要改动,做一定的冗余,应用也要改,sql中尽量带sharding key,将数据定位到限定的表上去查,而不是扫描全部的表;
mysql数据库一般都是按照这个步骤去演化的,成本也是由低到高;

最新文章