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

mysql之sql的优化方案(重点)

1、全字段匹配是最棒的

假如一个Staffs 这个表,将 name,age ,pos 组合成了一个联合索引,在where条件下,能够使用到的索引越多越好。
EXPLAIN SELECT * FROM staffs WHERE NAME = 'July';
EXPLAIN SELECT * FROM staffs WHERE NAME = 'July' AND age = 25;
EXPLAIN SELECT * FROM staffs WHERE NAME = 'July' AND age = 25 AND pos = 'dev';

 

 2、最佳左前缀法则

 

 创建索引的时候,  name --> age --> pos 
在使用索引的时候,也必须按照这个顺序来,不能少,顺序可以乱。

 

 3、索引列上不计算

3、不在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描。

 

 4、不能使用索引中范围条件右边的列

Explain select * from staffs where name='' and age >25 and pos='';
age > 25  这个 age 这个索引也用到了,但是 pos这个字段的索引没有起作用,失效了。

 5、尽量使用覆盖索引(只访问索引的查询(索引列和查询列一致)),减少select *

 

 以上的SQL语句,一样的where条件,因为 select 后面的字段不一样,sql的执行效率就不一样,因为第二个语句将 * 改为了三个索引字段,使用到了覆盖索引。

 6、使用不等于(!= 或者<>)的时候无法使用索引

 7、注意字段的null值和 not null 对sql的影响

第一种情况,name 是一个索引,name 字段允许为null

 第二种情况:name 是一个索引,name 字段不允许为null

 总结就是:索引字段,这个字段是否为null 对于sql的好坏有一定的影响,需要警惕。尽可能设置为not null

8、like以通配符开头('%abc...')mysql索引失效

 9、字符串不加单引号索引失效 (底层使用数据类型转换)

 10、少用or,用它来连接时会索引失效

 可以使用union 替代 or

接着是一个索引的练习题:

以上这些就是sql的优化的一部分。

总结了一个口诀:

全值匹配才最棒,最佳左前缀法则;
刘备大哥不能死,关羽兄弟不能断;
索引列上少计算,范围之后全完蛋;
LIKE百分写最右,覆盖索引有妙用;
不等空值还有OR,索引影响要注意;

mysql的优化是一个非常大的命题,大约分为4个大方向,我们只讲了一个方向:索引优化

  • 索引优化: 合理设计索引,优化查询性能,避免全表扫描。
  • 查询优化: 优化SQL查询语句,避免慢查询,提高查询效率。
  • 缓存优化: 合理利用MySQL内置的缓存机制,如查询缓存、结果缓存等,减少对数据库的访问次数。
  • 硬件优化: 选择合适的硬件配置,包括CPU、内存、磁盘等,提高数据库的吞吐量和响应速度。
http://www.lryc.cn/news/517529.html

相关文章:

  • 【LeetCode】303. 区域和检索 - 数组不可变
  • 前端开发 vue 中如何实现 u-form 多个form表单同时校验
  • 【网络】什么是速率 (Rate)带宽 (Bandwidth)吞吐量 (Throughput)?
  • (leetcode算法题)769. 最多能完成排序的块
  • 高光谱相机的特点
  • 《Spring Framework实战》8:4.1.3.Bean 概述
  • BGP的local_preference本地优先级属性
  • IP地址与端口号
  • Fastapi + vue3 自动化测试平台(2)--日志中间件
  • iOS - AutoreleasePool
  • 1.CSS的复合选择器
  • 优质内容在个人IP运营中的重要性:以开源AI智能名片商城小程序为应用实例的深度探讨
  • Kafka性能测试
  • 解决Docker冲突问题
  • 新手入门 React .tsx 项目:从零到实战
  • 基于可信数据空间的企业数据要素与流通体系建设(附ppt 下载)
  • 二维数组:求最大元素及其所在的行坐标及列坐标(PTA)C语言
  • WebRtc01: 课程导学、框架介绍
  • HQChart使用教程30-K线图如何对接第3方数据44-DRAWPIE数据结构
  • 【cuda学习日记】2.2 使用2维网络(grid)和2维块(block)对矩阵进行求和
  • 深度学习中CUDA环境安装教程
  • IDEA的常用设置
  • 【VUE+ElementUI】通过接口下载blob流文件设置全局Loading加载进度
  • 算法的五个重要特性和4个基本标准
  • svelte5中使用react组件
  • iOS - 自定义引用计数(MRC)
  • 北航现实场景无人机VLN新基准! OpenUAV:面向真实环境的无人机视觉语言导航,平台、基准与方法
  • OpenCV计算机视觉 08 图像的旋转
  • C++感受15-Hello STL 泛型启蒙
  • 【Java 学习】对象赋值的艺术:Java中clone方法的浅拷贝与深拷贝解析,教你如何在Java中实现完美复制