首页 > 数据库 >sql优化

sql优化

时间:2023-07-13 21:01:59浏览次数:29  
标签:优化 note 索引 全表 sql where teacher select

一、有索引而未被用到:

1、Like的参数以通配符%开头时,数据库引擎会放弃使用索引而进行全表扫描。

以通配符开头的sql语句,是全表扫描,没有使用到索引,不建议使用:

explain select * from teacher where tname like '%10';

sql优化_sql语句

不以通配符开头的sql语句,使用到了索引,是有范围的查找:

explain select * from teacher where tname like '10%';

sql优化_sql语句_02

 2、where条件不符合最左原则:

假设有这样一个索引——(a,b,c),必须用到第一个字段a,才会走索引。否则如select * from table where b='b' and c='c',就不会使用到索引。

3、索引列使用 != 或 <> 操作符时,数据库引擎会放弃使用索引而进行全表扫描。使用>或<会比较高效。

4、在 where 子句中对索引列进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。

sql优化_数据库引擎_03

5、在where子句中对索引列进行null值判断,引擎放弃使用索引而进行全表扫描。

如: 低效:select * from teacher where note is null ;

可以在note 上设置默认值0,确保表中note 列没有null值,然后这样查询:

高效:select * from teacher where note= 0;

6、在where子句中使用or来连接条件,导致引擎放弃使用索引而进行全表扫描。

如: 低效:select * from teacher where note = 12 or note = 122;

可以用下面这样的查询代替上面的 or 查询:

高效:select * from teacher where note = 12 union all select * from teacher where note = 122;

或者:select * from teacher where note in (12, 122);

标签:优化,note,索引,全表,sql,where,teacher,select
From: https://blog.51cto.com/u_16178335/6715978

相关文章

  • Mysql8.0多源复制和复制过滤
    一、Mysql多源复制1、Mysql多源复制的作用和特点  1)Mysql多源复制作用  选择一台从Mysql从多个主节点将数据复制到本地汇总备份 2)特点  将多台主Mysql服务器数据汇总到一台从Mysql服务器 Mysql5.7以后新增加的功能 方便数据库数据集中化管理和集中化备份2、主Mysq......
  • PostgreSQL 限定结果数量
    查询语句的结果可能包含成百上千行数据,但是前端显示时也许只需要其中的小部分,例如TOP-N排行榜;或者为了便于查看,每次只显示一定数量的结果,例如分页功能。为了处理这类应用,SQL提供了标准的FETCH和OFFSET子句。另外,PostgreSQL还实现了扩展的LIMIT语法。Top-N查询这类查询通常是为了......
  • mysql-语法
    1、引号单引号、双引号,不加引号,反引号,以及任意的圆括号2、结尾(1);一般,在终端交互时,一条sql语句的末尾需要使用;结尾,才会执行,或者enter后跳行等待输入;基于;还可以在一行中写入多条sql语句,相互间隔,依次执行,即使其中一条出现问题,后续sql语句仍然执行对于非终端提交语句,比如代......
  • MySQL基础
    好久没用Mysql有些东西都忘了在这记录一下方便以后查看  查看所有数据库showdatabases选中数据库use[数据库名字]删除数据库drop[数据库名字]创建数据库createdatabase[数据库名字] 表:查看所有的表showtables查询select*from[table][条件]删除表......
  • 05-优化程序性能
    写程序最主要的目标就是使它在所有可能的情况下都正确工作。一个运行得很快但是给出错误结果的程序没有任何用处。程序员必须写出清晰简洁的代码,这样做不仅是为了自己能够看懂代码,也是为了在检査代码和今后需要修改代码时,其他人能够读懂和理解代码。另一方面,在很多情况下,让程序运......
  • 使用vue3、egg和SQLite开发通用管理后台系统
    使用vue3、egg和SQLite开发通用管理后台系统plaform是一个基于RBAC模型开发的后台管理系统,没有多余的功能。本项目是一个以学习为目的的后台项目,旨在让前端也能充分了解RBAC模型是如何设计的,不建议用于线上,因为未经过充分的测试。项目地址:https://github.com/essay-org/platform......
  • destoon列表性能优化,关于IN()与FIND_IN_SET
    destoon数据达到一定之后列表打开速度就很慢,于是为了解决这个问题,进行以下办法处理。找到/include/tag.func.php文件,找到这段代码: 原因:区别:1、in后面只能跟常量,find_in_set()函数可以使用常量或字段。2、in是完全匹配,find_in_set()函数是精确匹配,字段值以英文”,”分隔。......
  • SQLServer中创建用户角色及授权
    在SQLServer中创建用户角色及授权假设,我们准备建立一个dba数据库帐户,用来管理数据库mydb。1.首先在SQLServer服务器级别,创建登陆帐户(createlogin)--创建登陆帐户(createlogin)createlogindbawithpassword='abcd1234@',default_database=mydb登陆帐户名为:“dba”,......
  • ChatGPT 问答00003 mysql中删除原来的自增ID,并重新根据字符串字段data字段排序重新生
    在MySQL中,自增ID是由MySQL引擎自动生成和维护的,通常与数据表的主键关联。删除自增ID并重新生成的需求比较特殊,因为自增ID的生成是基于数据表中已有的记录顺序的,直接删除和重新生成可能会破坏数据完整性和索引等方面的约束。不建议直接删除和重新生成自增ID,但你可以通过以下步骤实......
  • Hive数仓项目之需求分析、建模分析、优化方案Hive数仓项目之访问咨询主题看板增量的流
     往期内容:Hive数仓项目架构说明、环境搭建及数据仓库基础知识Hive数仓项目之数仓分层、数仓工具的使用Hive数仓项目之访问咨询主题看板:数据的采集、转换、分析导出Hive数仓项目之访问咨询主题看板增量的流程今日内容:访问咨询主题看板_增量的流程(操作)1.1:数据的采集1.2:数据......