当前位置: 首页 > news >正文

MySQL的故事——查询性能优化

查询性能优化

文章目录

  • 查询性能优化
  • 一、查询优化器的提示(hint)
  • 二、优化特定类型的查询


一、查询优化器的提示(hint)

HIGH_PRIORITY和LOW_PRIORITY
这个提示告诉MySQL,当多个语句同时访问某一个表时,哪些语句的优先级相对高些,哪些相对低些
DELAYED
这个提示对INSERT和REPLACE有效。MySQL会将使用该提示的语句立即返回给客户端,并将插入的行数据放入到缓冲区,然后在表空闲时批量将数据写入。
STRAIGHT_JOIN
这个提示可以放在SELECT关键字之后,也可以放在任何两个关联表的名字之间。第一个用法是让查询中的所有表按照在语句中出现的顺序进行关联。第二个用法则是固定其前后两个表的关联顺序。
SQL_SMALL_RESULT和SQL_BIG_RESULT
只对select语句有效。它们告诉优化器group by或者distinct查询如何使用临时表及排序。
SQL_BUFFER_RESULT
这个提示告诉优化器将查询结果放入一个临时表,然后尽可能快地释放表锁。
SQL_CACHE和SQL_NO_CACHE
告诉MySQL这个结果集是否应该缓存在查询缓存中。
SQL_CALC_FOUND_ROWS
它会让MySQL返回的结果集包含更多的信息。
FOR UPDATE和LOCK IN SHARE MODE
使用该提示会对符合查询条件的数据加行锁。
USE INDEX、IGNORE INDEX和FORCE INDEX
这几个提示会告诉优化器使用或者不使用哪些索引来查询记录(例如,在决定关联顺序的时候使用哪个索引。)
optimizer_search_depth
这个参数控制优化器在穷举执行计划时的限度。
optimizer_prune_level
该参数是默认打开的,这让优化器会根据需要扫描的行数来决定是否跳过某些执行计划。
optimizer_switch
这个变量包含了一些开启/关闭优化器特性的标志位。

二、优化特定类型的查询

优化count()查询
count()可以统计某个列的数值,也可以统计行数。
在统计列值时要求列是非空的(不统计NULL)。count(*)统计行数。
SELECT
COUNT(color = ‘blue’ OR NULL) AS blue,
COUNT(color = ‘red’ OR NULL) AS red
FROM
items

SELECT
sum(IF(color = ‘blue’, 1, 0)) AS blue,
sum(IF(color = ‘red’, 1, 0)) AS red
FROM
items

SELECT
sum(color = ‘blue’) AS blue,
sum(color = ‘red’) AS red
FROM
items

优化limit分页
偏移量非常大的时候,例如LIMIT 10000,20可能需要查询到10020条结果,然后返回20条。
可以使用书签记录上一次查询的位置,那么下次查询就会从书签位置开始扫描。
select * from user where id>10000 limit 10000,20

使用用户自定义变量
定义用户自定义变量:SET @one :=1;
SET@last_week :=CURRENT_DATE-INTERVAL 1 WEEK;
不过在编写SQL语句使用用户自定义变量时需要注意,在对变量赋值和读取变量可能是在查询的不同阶段,所以最好把变量的赋值和读取写在一起,或者要搞明白SQL语句的执行过程。


http://www.lryc.cn/news/157861.html

相关文章:

  • 在外SSH远程连接macOS服务器【cpolar内网穿透】
  • Nosql数据库服务之redis
  • 当AI遇到IoT:开启智能生活的无限可能
  • Qt5界面Qt Designer上添加资源图片后,ModuleNotFoundError: No module named ‘rcc_rc‘ 的终极解决方案
  • 社群运营怎么做?
  • Vite,Vue3项目引入dataV报错的解决方法
  • QT(8.30)常用类与组件,实现登录界面
  • 【Two Stream network (Tsn)】(二) 阅读笔记
  • 记一次语音播报功能
  • Unity设置TextMeshPro文本超出范围显示...
  • Java中级面试题记录(三)
  • spring高级源码50讲-1-8(spring容器与bean)
  • 微服务06-Dockerfile自定义镜像+DockerCompose部署多个镜像
  • 2023高教社杯 国赛数学建模A题思路 - 定日镜场的优化设计
  • Qt +VTK+Cmake 编译和环境配置(第二篇,中级篇, 重新编译)
  • 图的学习,深度和广度遍历
  • ChatGPT驱动下,网站AI客服该如何进步和创新
  • Linux系统中实现便捷运维管理和远程访问的1Panel部署方法解析
  • 数学建模黄河水沙监测数据分析
  • Unity ProBuilder(自己创建斜面、拐角)
  • 以气象行业为例,浅谈在ToB/ToG行业中如何做好UI设计
  • shiny根据数据的长度设置多个色板
  • 2023高教社杯 国赛数学建模D题思路 - 圈养湖羊的空间利用率
  • 网络是如何进行通信
  • vue3 watch watchEffect
  • lintcode 1410 · 矩阵注水【BFS 中等 vip】
  • 软件架构设计(十) 架构评估(复审)-方法论
  • SQL注入案例
  • lv3 嵌入式开发-5 linux shell命令(进程管理、用户管理)
  • 学习Bootstrap 5的第六天