首页 > 数据库 >【Mysql系列】- SQL语句优化

【Mysql系列】- SQL语句优化

时间:2022-12-20 15:00:00浏览次数:41  
标签:语句 name SQL 索引 user Mysql WHERE id SELECT

前言

 Sql语句优化是Mysql性能优化的一部分,我们看下常见Sql语句优化及注意的有哪些。

 

一、查询SQL尽量不要使用select *,而是具体字段

  1. 反例

SELECT * FROM user;

     2. 正例

SELECT id,name,tel FROM user

   说明:

  • 只返回需要的字段,节省资源,减少网络开销。
  • 可能用到覆盖索引,减少回表,提高查询效率。

 

二、避免在where子句中使用 or 来连接

  1. 反例

SELECT * FROM user WHERE id = 1 OR name = "song"

2、正例

(1)使用union all

SELECT * FROM user WHERE id = 1 
UNION ALL
SELECT * FROM user WHERE name = "song"

 

  (2) 或者分开两条sql写

SELECT * FROM user WHERE id = 1

SELECT * FROM user WHERE name = "song"

说明:

  • 使用or可能会使索引失效,从而导致全表扫描。
  • 对于or没有索引的name这种情况,假设它走了id的索引,但是走到name查询条件时,它还得全表扫描。
  • 也就是说整个过程需要三步:全表扫描+索引扫描+合并。如果它一开始就走全表扫描,直接一遍扫描就搞定。
  • 虽然mysql是有优化器的,出于效率与成本考虑,遇到or条件,索引还是可能失效的。

 

 

 

 

 

 

 

标签:语句,name,SQL,索引,user,Mysql,WHERE,id,SELECT
From: https://www.cnblogs.com/songgj/p/16994157.html

相关文章

  • java.sql.Connection 线程安全吗?
    首先看一段代码:try(Connectionconnection=DriverManager.getConnection("jdbc:mysql://remote01:3306/test");){ ExecutorServiceexecutor=ThreadUtil.newExecut......
  • mysql 分组后的数据显示和实际数据有差别
    SELECT*,count(1),SUM(if(ARRIVE.ARRIVE_TIME!='无',1,0))assFROMlt_cleanroute_point_arriveASARRIVEWHEREDATE_FORMAT(data_dt,'%Y-%m'......
  • Microsoft SQL Server 2008 R2 安装程序出错实例
    出现以下错误:''isnotavalidloginoryoudonothavepermission. 2-报错原因装这么多数据库,第一次遇到这种问题,于是开始上网查,报错原因是这样的:设置的电脑名......
  • H5 WebSQL每日成语
    有一天看到同事发的类似这种成语填空一样的内容。================惟利()视为德()终质非文()()追耗子================烂漫天()()则改之,无则嘉勉得()之作......
  • 面试官:MySQL一千万数据,怎么快速查询?
    前言面试官:来说说,一千万的数据,你是怎么查询的?me:直接分页查询,使用limit分页。面试官:有实操过吗?me:肯定有呀此刻献上一首《凉凉》也许有些人没遇过上千万数据量的表,也不清楚查......
  • MySQL-InnoDB磁盘结构
    主要阐述InnoDB存储引擎(MySQL5以后的默认引擎)。数据库中最基本的组成结构是数据表,视觉上的表和其对应的磁盘结构如下:此图参考了厦门大学课堂:MySQL原理。但是视频中一些......
  • Sql 中常用日期转换Convert(Datetime)
    Sql中常用日期转换Convert(Datetime) CONVERT(data_type,expression[,style]) convert(varchar(10),字段名,转换格式)说明:此样式一般在时间类型(datetime,smallda......
  • 故障分析 | MySQL死锁案例分析
    一 背景死锁,其实是一个很有意思也很有挑战的技术问题,大概每个DBA和部分开发同学都会在工作过程中遇见过。本次分享的死锁案例更新不存在的记录加上XGAPlock和inser......
  • MySQL锁等待超时一例分析
    1、问题现象开发反馈某业务持续性报锁等待超时,相关错误信息如下:Lock wait timeout exceeded; try restarting transaction为了能精确定位问题,继续询问开发有没有......
  • 基于jsp+servlet+mysql简单的实现了商品的增删改查
    @目录一、系统介绍二、功能展示1.商品主页2.商品添加3.商品修改4.商品查询5.商品删除三、数据库四、其它系统一、系统介绍系统主要功能:简单的实现了商品的增删改查环境......