优秀的编程知识分享平台

网站首页 > 技术文章 正文

MySQL基础(其它SQL优化)(mysql数据库优化及sql调优)

nanyue 2024-10-28 16:40:12 技术文章 5 ℃

4、其它SQL优化

4.1 插入数据

  1. 使用批量插入,insert into table_name values(column,column,column),(column,column,column)
  2. 使用手动事务一次性提交语句,开启手动事务start transation或begin
  3. 主键顺序插入,尽量使用主键自增少使用uuid主键
  4. 数据量很大的时候不要使用insert语句循环直接使用load进行文件一次性加载到表中 load data local infile '/root/sql.sql' into table 'table_name' fields terminated by ',' lines terminated by '\n'

4.2 主键优化

  1. 主键尽量顺序插入避免造成页分裂或者页合并,MySQL底层会自动的对B+Tree的结构进行调整优化。
  2. 业务操作时尽量不要对主键进行修改操作,会影响到索引等。
  3. 尽量使用自增主键少用uuid。

4.3 order by优化

order by的时候会有两种排序规则,一个是全表扫描filesort和索引扫描index。显然的就是全表扫描的排序的性能比较的差。所以我们需要尽量的使用索引进行排序,但是有的时候索引排序也会失效。

  1. 在使用联合索引时要注意索引的最左前缀原则,最左侧的索引列不在则索引无效
  2. 创建索引时默认的就是asc,当出现多个字段都是asc时索引生效,如果多个字段都是desc那么就会反查,如果一个排序规则是desc一个是asc那么索引无效,要想索引生效那么就要创建联合索引时就要指定好排序规则。
  3. 尽量使用覆盖索引也就是返回的字段尽量都是有索引的避免出现select * 的回表查询。
  4. 数据量过大时可以修改排序缓冲区的大小,sort_buffer_size 默认是256K。

4.4 group by优化

  1. 分组时尽量使用带有索引的字段来分组
  2. 分组操作时也要满足最左前缀法则

4.5 limit优化

limt是用于分页的,如果数据量过大的话就会导致把前面的数据都查询一遍然后在进行分页,此时我们一般采用的就是覆盖索引加子查询的方式,比如先查符合limit条件的主键,然后把查出来的结果当个表进行子查询。

4.6 count优化

  1. 尽量使用count(*) 或 count(1)进行统计
  2. 能使用字段not null就设置not null,因为count函数不统计为null的数据,也可能导致统计数据不准确。

4.7 update优化

执行更新操作时where条件尽量使用索引字段来作为条件,此时会对这条记录加上行锁,如果使用非索引字段的话就会产生表锁。

最近发表
标签列表