达梦多表关联,其中有三张表为千万数据如何提升查询效率

2 02 2 年,我在某城市的一个项目中遇到了一个难题,就是提高大梦数据库三千万数据表的相关查询效率。
这确实是一个大工程。
起初我很困惑,不知道从哪里开始。

首先我要优化表结构设计,这一点非常重要。
我分析了查询条件,然后为联接和过滤器常用的列创建了索引。
例如,如果查询条件是基于id列的连接,我为该列创建索引,效果显着。

然后我研究了应用分区表。
根据数据的特点,比如时间或者地域,我对这些大表进行了分区。
比如我把一张交易数据表按天分区,每月一个分区。
这样查询时就可以只扫描相关分区,减少扫描的数据量。

接下来,我优化了查询语句。
我只选择查询所需的列,避免了 SELECT 并减少了数据传输量。
我还评估了连接方法,以确保内部连接的连接条件正确且高效。
对于外连接,我尝试调整业务逻辑并将其转换为内连接以提高性能。

我还优化了数据库配置。
我适当增加了数据库服务器的内存,以保证查询时有足够的内存用于数据存储和执行计划。
我还启用了并行查询,这允许数据库使用多个CPU核心同时处理查询任务,但我也注意设置适当的并行度以避免消耗太多资源。

然后我执行数据预处理。
我在查询之前聚合数据,以减少连接中涉及的数据量。
我还对数据进行了采样,对采样数据进行了测试和优化查询,然后将其应用于整个数据。

最后,我进行定期维护。
我定期重建索引,消除索引碎片,提高索引查询效率。
我还及时更新表和索引统计信息,以便数据库的查询优化器可以生成更准确的执行计划。

在这个过程中我学到了很多东西。
虽然有时候我觉得自己可能有些极端,但我最终还是找到了解决办法。

mysql 千万级数据 优化查询速度

在此 SQL 语句中没有发现任何内容。
如果我使用%abc%扫描整个表,索引将不起作用。
可以拆分一个表,但必须将其分成许多块。
根据数据量,您可能不需要扫描整个表。
添加userid条件,使用userid索引,效率很高。