MySQL 查询优化思路

在统计的时候尝尝遇到过查询数据量大的情况,SQL会超时

下面是一些解决方案 (未经本人允许不得转载)

1、索引

sql 复制代码
	加完看索引是否生效(一般情况都是普通索引+tree)
	创建联合索引(注意顺序)

2、 SQL语句

重新审视逻辑把没用的表连接删除掉,然后是修改join的方式。inner join 是最快的

3、增加中间表

为了方便查询可以增加中间表,或者直接在旧表上面新建字段。

临时统计时,如果原有表数据量太大,可以按照时间条件把要用的数据先导出成excel然后在导入一张新表

4、修改MySQL的配置信息

比如下面这些信息(真实情况更为复杂根据实际需求调整对应的参数)

sql 复制代码
SET SESSION join_buffer_size = 262144;  -- 临时将join_buffer_size设置为256KB
SET SESSION sort_buffer_size = 2097152;  -- 临时将sort_buffer_size设置为2MB
SET SESSION optimizer_search_depth = 8;  -- 临时设置优化器搜索深度为8
SET SESSION max_join_size = 1000000;  -- 临时允许联接的最大行数为1,000,000行
SET SESSION sql_big_selects = 1;  -- 临时允许执行大型查询

题外话

导入/更新数据特别多特别慢的时候,可以采用拼接SQL的方式

根据参数拼接成update/insert 语句然后使用navicat执行。主要要勾选autocommit=0,还有就是一个运行里面允许多个查询这样的操作一般不会出问题,不过也有可能因为网络波动什么的导致数据丢失。

代码方面:可以采用多线程、异步处理、写入数据库的时候分批次插入

相关推荐
mr_LuoWei20093 分钟前
python工具:python代码知识库笔记
数据库·python
这周也會开心13 分钟前
Redis数据类型的底层实现和数据持久化
数据库·redis·缓存
ん贤14 分钟前
一次批量删除引发的死锁,最终我选择不加锁
数据库·安全·go·死锁
千寻技术帮19 分钟前
10327_基于SpringBoot的视频剪辑咨询网站
mysql·源码·springboot·代码·视频咨询
数据知道25 分钟前
PostgreSQL 核心原理:系统内部的对象寻址机制(OID 对象标识符)
数据库·postgresql
倔强的石头_1 小时前
关系数据库替换用金仓:数据迁移过程中的完整性与一致性风险
数据库
Elastic 中国社区官方博客1 小时前
使用 Groq 与 Elasticsearch 进行智能查询
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
穿过锁扣的风1 小时前
一文搞懂 SQL 五大分类:DQL/DML/DDL/DCL/TCL
数据库·microsoft·oracle
l1t1 小时前
DeepSeek总结的SNKV — 无查询处理器的 SQLite 键值存储
数据库·sqlite·kvstore
洛豳枭薰1 小时前
MySQL 梳理
数据库·mysql