在sql查询中为了提高查询效率,我们常常会采取一些措施对查询语句进行sql优化,下面总结的一些方法,有需要的可以参考参考

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num is null
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
select id from t where num=0

3.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。

4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num=10 or num=20
可以这样查询:
select id from t where num=10
union all
select id from t where num=20

5.in 和 not in 也要慎用,否则会导致全表扫描,如:
select id from t where num in(1,2,3)
对于连续的数值,能用 between 就不要用 in 了:
select id from t where num between 1 and 3

6.下面的查询也将导致全表扫描:
select id from t where name like ‘%abc%’

7.应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:
select id from t where num/2=100
应改为:
select id from t where num=100*2

8.应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:
select id from t where substring(name,1,3)=‘abc’–name以abc开头的id
应改为:
select id from t where name like ‘abc%’

9.不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。

10.在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,
否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。

11.不要写一些没有意义的查询,如需要生成一个空表结构:
select col1,col2 into #t from t where 1=0
这类代码不会返回任何结果集,但是会消耗系统资源的,应改成这样:
create table #t(…)

12.很多时候用 exists 代替 in 是一个好的选择:
select num from a where num in(select num from b)
用下面的语句替换:
select num from a where exists(select 1 from b where num=a.num)

13.并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,
如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。

14.索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,
因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。
一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。

15.尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。
这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。

16.尽可能的使用 varchar 代替 char ,因为首先变长字段存储空间小,可以节省存储空间,
其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。

17.任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。

18.避免频繁创建和删除临时表,以减少系统表资源的消耗

sql优化建议与技巧相关推荐

  1. MySQL · 性能优化· CloudDBA SQL优化建议之统计信息获取

    阿里云CloudDBA具有SQL优化建议功能,包括SQL重写建议和索引建议.SQL索引建议是帮助数据库优化器创造最佳执行路径,需要遵循数据库优化器的一系列规则来实现.CloudDBA需要首先计算表统计 ...

  2. HTTPS站点优化建议及技巧

    本文转自IT摆渡网欢迎转载,请标明出处. 更多文章请阅读 SEO优化推广 百度开放https收录,并明确表示同一域名优先收录https版,建议站长关闭http版.而早在去年谷歌已经公开表示将把http ...

  3. mysql advisor github_GitHub - zyw/sqladvisor-web: 美团SQLAdvisor SQL优化建议工具的Web版,告别命令行...

    sqladvisor-web 美团SQLAdvisor SQL优化建议工具的Web版,告别命令行. 项目中使用的美团SQL分析工具是在CentOS上编译的,所以建议部署到CentOS上. 该项目是使用 ...

  4. 复杂sql优化步骤与技巧

    数据管理型系统,由于用户的要求或者系统设计要求,会出现大量表进行join,还要进行大量统计性数据查询展示,甚至数据权限控制等操作.最后会导致sql异常复杂,随着数据量增加,或者只是应用到生产环境(正式 ...

  5. SQL优化建议(不定时更新添加)

    1.临时表和非日志表的存储方式建议和基表相同.当基表为行存(列存)表时,临时表和非日志表也推荐创建为行存(列存)表,可以避免行列混合关联带来的高计算代价. 2.索引字段的总长度不超过50字节.否则,索 ...

  6. Oracle的SQL优化建议

    第一.SQL语句尽量用大写的 因为oracle总是先解析SQL语句,把小写的字母转换成大写的再执行 第二.使用表的别名 当在SQL语句中连接多个表时, 请使用表的别名并把别名前缀于每个Column上. ...

  7. JAVA代码优化,接口优化,SQL优化 (小技巧)

    这里写目录标题

  8. sql 查询重复数据大于2条以上的_「干货」关于SQL书写建议 索引优化的总结,你值得拥有...

    前言 平时写sql写的比较多,一直没把优化相关的知识整理记录下来,本文章记录对SQL优化的一些技巧: 我将结合demo(一个百万级数据表),去实践验证这些优化技巧. 测试用例 接下来,我们创建一个测试 ...

  9. mysql问题定位_十、MySQL的SQL优化之定位SQL的问题 - 系统的撸一遍MySQL

    找出SQL慢的原因 谈到MySQL不得不说的就是大家都会遇到的性能问题,今天就记录一下SQL优化相关的技巧. 检查MySQL状态 通过检查SQL语句的状态有助于MySQL的优化,首先介绍 show s ...

最新文章

  1. MySQL数据库中创建表并给某个字段添加数据
  2. linux设备驱动程序jd,Linux设备驱动程序学习(基于2440的GPIO字符设备驱动)
  3. 如何利用OpenSSL生成证书
  4. 【图像分割模型】快速道路场景分割—ENet
  5. Redis 总结精讲
  6. 修改oracle归档目录和大小
  7. 西门子ddc_铁门关西门子两通电动阀VVF42.25-10C+SKD60西
  8. 《自然》杂志:中国人越来越沉迷于对着一个叫“区块链”的东西胡言乱语
  9. cas后端返回html直接跳转,CAS验证成功后不能跳转到登陆成功的主页面解决办法...
  10. Facebook发布基站开源平台OpenCellular
  11. 获取设备和 App 信息
  12. C# 3.0语言新特性(语言规范):4 对象和集合初始化器
  13. Linux高可用集群搭建
  14. 【PhotoShop】ps 基础知识
  15. SRE Google运维解密——第二章Goolgle的生成环境介绍
  16. IMAC 2011 MID免光驱安装WIN10
  17. 【论文阅读】Image Super-Resolution Using Deep Convolutional Networks
  18. doctrine-orm基础(单用doctrine避坑指南)
  19. 163个人邮箱如何注册申请?vip邮箱有哪些优点?
  20. 怎么查看电脑磁盘的分区是GPT还是MBR

热门文章

  1. python游戏制作
  2. uni app实现WIFI功能(只支持安卓APP)
  3. 好小三2103 520谭之一:BCBC“数学的故事”笑谭
  4. 零基础制作平衡小车【连载】8---位置式PID和增量式PID
  5. 自己动手设计一款iOS自动构建发布工具
  6. vue-admin-template 把默认英文版改回中文
  7. 吴恩达学习—Logistic Regression
  8. 杭州一公司开出20万月薪/320万年薪抢人!ChatGPT掀起AI热潮,AIGC人才被爆抢
  9. UnityC#学习之--弧度和角度相互转化
  10. 计算机 字节、位等之间的换算