首页 > 数据库 >SQL 优化 (总)

SQL 优化 (总)

时间:2023-08-28 10:56:19浏览次数:48  
标签:JOIN 性能 索引 INNER SQL 优化 冗余

一、SQL 语句
1、Select:尽量不用Select星号语句,因为Select星号会全表扫描,导致sql语句性能大大降低。使用具体的列代替 星号,避免多余的列2、Where:(1) where 条件避免 前面加函数和操作(2) 避免在where子句中使用!=或<>操作符,否则将引擎放弃索引进行全表扫描3、Like:like 避免开头% 全局扫描4、In:(1) in 性能大于 join(2) 可以使用in(select )(3) exists进行代替

二、两方面  内存(程序)  和 磁盘(数据库) 去考虑 ,要预估数据量  放内存中更快  


三、必要可以冗余  ,多表可以冗余 ,经常变动的列 。 

比如用户表 姓名和部门  冗余到记录表里面 还有一个好处 可以获得到当时存的真实数据(名字 部门)优化原因 :频繁去left表拿到常用字段

四、索引

1、主键索引 必建立2、复合索引 命中  最左特性3、建立索引的列:
(1)  用于查询的字段 where(2) 用于排序或分组的字段 order by 、group by(3) 范围查询(时间范围) 、datetime(4) 需要统计(count、sum、avg)(5) 经常需要连表查询的字段 left on

五、注意:

1、in 性能大于 join
INNER JOIN和IN性能开销结论:
当INNER JOIN表中列数据是唯一的,此时INNER JOIN和IN的性能开销是相同的,当INNER JOIN表中列数据是重复的,此时IN性能要INNER JOIN要好。







标签:JOIN,性能,索引,INNER,SQL,优化,冗余
From: https://www.cnblogs.com/buzheng11/p/17661702.html

相关文章

  • 使用MySQL命令行新建用户并授予权限的方法
    MySQL命令行能否实现新建用户呢?答案无疑是肯定的。而且在使用使用MySQL命令行新建用户后,还可以为用户授予权限。首先要声明一下:一般情况下,修改MySQL密码,授权,是需要有mysql里的root权限的。注:本操作是在WIN命令提示符下,phpMyAdmin同样适用。用户:phplamp用户数据库:phplampDB1.......
  • Linux下MySql开放访问权限
    在Linux下安装完数据库后,局域网内无法访问。 设置方法:1.停止mysql,进入/etc/mysql/,编辑my.cnf,找到bind-address的配置,改为0.0.0.0,然后启动mysql2.登录mysql,进入mysql数据库,执行updateusersethost='%'wherehost='127.0.0.1'anduser='root',执行完成后再使用命令flushprivileg......
  • ubuntu上mysql的安装以及基本用法
    1.使用apt-get查找当前可用的mysql版本.apt-cachesearchmysql返回的结果集为: 2.通过结果集找到最新可用的服务端是mysql-server,安装mysql-serversudoapt-getinstallmysql-server 按提示安装即可(中间会提示设置root口令)。3.测试是否安装正确#登录mysql-uroot-p出现以下......
  • Django信号、自定制命令、开启事务、执行原生SQL
    目录Django信号内置信号自定义信号执行原生SQL自定制命令步骤Django信号django自带一套信号机制来帮助我们在框架的不同位置之间传递信息。简单的说,当某一事件发生时,信号系统可以允许一个或多个发送者(senders)将通知或信号(siganls)发送给一组接收者(receivers)。有内置信号(......
  • 20230628 java.sql.DriverManager
    介绍java.sql.DriverManagerpublicclassDriverManager驱动管理器根据API编写的程序都可以与驱动管理器进行通信,而驱动管理器则通过驱动程序与实际的数据库进行通信APIstaticgetConnectionConnectiongetLogWriter,setLogWritergetLoginTimeout,setLoginT......
  • 20230628 java.sql.ResultSet
    介绍java.sql.ResultSetpublicinterfaceResultSetextendsWrapper,AutoCloseable结果集结果集支持滚动,支持更新,默认不开启API常量FetchDirectionFETCH_FORWARD:1000FETCH_REVERSE:1001FETCH_UNKNOWN:1002resultSetTypeTYPE_FORWARD_ONLY:1003结果......
  • 20230628 java.sql.SQLException
    介绍java.sql.SQLExceptionpublicclassSQLExceptionextendsjava.lang.ExceptionimplementsIterable每个SQLException都有一个由多个SQLException对象构成的链有大量的异常子类,按照树结构组织API构造器SQLException()SQLException(Stringreason)SQLExceptio......
  • 20230628 java.sql.Statement
    介绍java.sql.StatementpublicinterfaceStatementextendsWrapper,AutoCloseable语句API常量SUCCESS_NO_INFO:-2EXECUTE_FAILED:-3getMoreResultsCLOSE_CURRENT_RESULT:1KEEP_CURRENT_RESULT:2CLOSE_ALL_RESULTS:3autoGeneratedKeysRETURN_GENE......
  • 20230629 java.sql.CallableStatement
    介绍java.sql.CallableStatementpublicinterfaceCallableStatementextendsPreparedStatementAPIpublicregisterOutParameterwasNullset/getgetArraygetRefsetAsciiStreamsetBigDecimal,getBigDecimalsetBinaryStreamsetBlob,getBlobsetBoolean,getBoo......
  • 20230629 java.sql.DatabaseMetaData
    介绍java.sql.DatabaseMetaDatapublicinterfaceDatabaseMetaDataextendsWrapper数据库的元数据API常量procedureResultUnknown:0procedureNoResult:1procedureReturnsResult:2procedureColumnUnknown:0procedureColumnIn:1procedureColumnInOut:2p......