首页 > 数据库 >MYSQL数据库进阶篇——SQL优化

MYSQL数据库进阶篇——SQL优化

时间:2024-09-13 23:25:35浏览次数:12  
标签:count 索引 SQL 进阶篇 InnoDB MYSQL 排序 优化 主键

1.插入数据优化

①批量插入数据

②手动提交事务

③主键顺序插入

大批量插入数据:

2.主键优化

数据组织方式

页分裂:页可以为空,也可以填充一半,也可以填满,每个页包含2-N行数据,如果一行数据过大,就会行溢出。

例如:

页合并

当删除一行数据时,实际记录并没有被物理删除,只是记录被标记为删除,并且它的空间变得允许被其他记录声明使用

MERGE_THRESHOLD:合并页的阈值,在创建表或者创建索引时指定。

主键设计原则:

①尽量降低主键长度

②插入数据尽量选择顺序插入,使用auto_increment自增主键

③尽量不要使用UUID做主键,如身份证号。

④避免修改主键

3.order by优化

①Using filesort:通过表的索引或全表扫描,读取满足条件的数据行,然后在排序缓冲区sort buffer中完成排序操作,所有不是通过索引直接返回排序结果的排序叫FileSort排序。

②Using index:通过有序索引顺序扫描直接返回有序数据,这种情况就是Using index,不需要额外排序,操作效率高

①根据排序字段建立合适的索引,多字段排序时,也遵循最左前缀法则。

②尽量使用覆盖索引

③多字段排序,一个升序一个降序,此时需要注意联合索引在创建时的规则

④如果不可避免出现FileSort,大量数据排序时,可适量增大缓冲区大小sort_buffer_size(默认256k)

4.group by优化

①在分组时,可通过索引来提升效率

②分组时,索引的使用符号最左前缀法则

5.limit优化

limit(m,n),如果m特别大,而n比较小,那么有大量数据被丢弃,查询排序的代价特别大。

一般分页查询时,通过创建覆盖索引,可通过覆盖索引加子查询的方式进行优化。

6.count优化

执行select count(*)时:

MYISAM引擎把整个表的总行数存在了磁盘,因此执行时会直接返回这个数,效率高

InnoDB引擎执行时,需要把数据一行一行从引擎读出来,然后计数。

count(主键):

InnoDB会遍历整个表,把每一行的主键id取出来,返回给服务层,服务层拿到主键后,直接按行累加

count(字段):

没有not null约束:InnoDB会遍历整张表把每一行字段值都取出来,返回给服务层,服务层判断是否为null,不为bull计数。

有null约束:同主键一样。

count(1):

InnoDB遍历整张表,但不取值,服务层对于返回的每一行,放一个"1"进去,进行累加。

count(*):

InnoDB不会取全部字段,而是做了优化,不取值,服务层直接按行进行累加

按效率排行:

count(字段)<count(主键id)<count(1)≈count(*)

7.update优化

InnoDB的行锁是针对索引加的锁,不是针对记录加的锁,所有索引不能失效,否则会从行锁升级为表锁。

最后可以参考一下博客:sql优化的15个小技巧(必知五颗星),面试说出七八个就有了_sql优化常用的15种方法-CSDN博客

标签:count,索引,SQL,进阶篇,InnoDB,MYSQL,排序,优化,主键
From: https://blog.csdn.net/qq_74177011/article/details/139103317

相关文章

  • 学习记录:MySQL索引
    索引的作用加速数据检索:通过为数据库表创建索引,可以极大地减少数据库引擎在查询过程中需要扫描的数据量,从而显著提升数据检索的速度。像是字典的目录,快速定位到所查找的内容。强化数据完整性:唯一索引(UniqueIndex)能够确保表中的某一列或列组合的值是唯一的,有效防止数据重复......
  • SQL server 语句 日期格式查找
    1.SQLServer中,处理日期格式和查找特定日期格式方法示例在SQLServer中,处理日期格式和查找特定日期格式的记录是一个常见的需求。SQLServer提供了多种函数和格式选项来处理和比较日期。以下是一个详细的示例,展示了如何根据特定日期格式查找记录。1.1场景描述假设我们有一个名......
  • SQL Server 语句日期格式查找方法
    1.SQLServer中,处理日期格式和查找特定日期格式方法示例在SQLServer中,处理日期格式和查找特定日期格式的记录是一个常见的需求。SQLServer提供了多种函数和格式选项来处理和比较日期。以下是一个详细的示例,展示了如何根据特定日期格式查找记录。1.1场景描述假设我们有一个......
  • Windows下批处理文件导入sql文件到MySQL5.5.50
    用来试验的MySQL的版本为5.5.50run.bat::DOS的UTF-8字符集chcp65001@ECHOOFF::到MySQL下新建文件夹set/pvar="请输入MySQL安装路径(如“C:\ProgramFiles(x86)\MySQL\MySQLServer5.5”):"set/pdirsql="请输入sql文件路径(如“C:\Users\Administrator\Desktop”):"c......
  • 【MySQL】查询语句之inner、left、right、full join 的区别
     前言:    INNERJOIN和OUTERJOIN是SQL中常用的两种连接方式,用于从两表活多表中提取相关的数据。两者区别主要在于返回的结果集如何处理匹配与不匹配的行。目录1、INNERJOIN2、OUTERJOIN3、总结1、INNERJOIN    称为内连接,只有查询的几......
  • 使用pdo 连接sqlsrv 报错 ssl错误。
     报错:SQLSTATE[08001]:[Microsoft][ODBCDriver17forSQLServer]SSLProvider:[error:0A0C0103:SSLroutines::internalerror]或者:SQLSTATE[08001]:[Microsoft][ODBCDriver17forSQLServer]SSLProvider:[error:0A000102:SSLroutines::unsupportedprotocolubu......
  • 在Ubuntu 20.04上安装PostgreSQL的方法【快速入门】
    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。简介PostgreSQL,或者简称为Postgres,是一个关系型数据库管理系统,提供了SQL查询语言的实现。它符合标准,并具有可靠的事务和并发性等许多高级功能,而无需读取锁定。本指南演......
  • 基于SpringBoot+Vue+MySQL的家教管理系统
    系统展示用户前台界面管理员后台界面系统背景  传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装家教管理系统软件来发挥其高效地信息处理的作用,可以规范信......
  • 基于SpringBoot+Vue+MySQL的瑜伽馆管理系统
    系统展示用户前台界面管理员后台界面系统背景  本系统采用SpringBoot作为后端框架,Vue.js构建前端用户界面,MySQL作为数据库存储系统,实现了瑜伽馆的全面数字化管理。系统涵盖会员管理、课程预约、教练排班、收入统计等功能模块,旨在提升瑜伽馆运营效率,优化顾客......
  • 2024Mysql And Redis基础与进阶操作系列(7)作者——LJS[含MySQL 聚合、数学、字符创、日
    目录MySQL函数1.聚合函数 格式补充 示例将所有员工的名字合并成一行指定分隔符合并指定排序方式和分隔符2.数学函数(即用即查,重在融会贯通与运用)3.字符串函数(即用即查,重在融会贯通与运用)4.日期函数(即用即查,重在融会贯通与运用)5.控制流函数(即用即查,重在融会贯通与运用)if逻辑判......