iis服务器助手广告
返回顶部
首页 > 资讯 > 数据库 >常见SQL编写和优化
  • 696
分享到

常见SQL编写和优化

常见SQL编写和优化 2020-03-24 15:03:55 696人浏览 无得
摘要

常见的sql优化方式 对查询进行优化,应尽量避免全表扫描,首先应考虑在where及order by 涉及的列上建立索引。 应尽量避免在 where 子句中对字段进行null 值判断,否则将导致引擎放弃使用索引而进行全表

常见的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  
  1. 应尽量避免在 where 子句中使用 !=或<> 操作符,否则将引擎放弃使用索引而进行全表扫描。

  2. 应尽量避免在 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   

对于union, 优先使用union all, 避免使用union。

UNION 因为会将各查询子集的记录做比较,故比起UNION ALL ,通常速度都会慢上许多。

一般来说,如果使用UNION ALL能满足要求的话,务必使用UNION ALL。

  1. 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  
  1. 慎用模糊查询,使用 like 两边加“%”--造成索引失效。
    左边没有%,这个索引不会失效。下面的查询将导致全表扫描:
select id from t where name like '%abc%'    
  1. 应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:
select id from t where num / 2 = 100    

应改为:

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

应改为(like 统计第6点):

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

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

  3. 不要写一些没有意义的查询,如需要生成一个空表结构:
select col1,col2 into #t from t where 1=0   

这类代码不会返回任何结果集,但是会消耗系统资源的,应改成这样:

create table #t(...)    
  1. in和exist。in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。因此,in用到的是外表的索引, exists用到的是内表的索引。

如果查询的两个表大小相当,那么用in和exists差别不大,

如果两个表中一个较小,一个是大表,则子查询表大的用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) 
  1. 并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,
    如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。

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

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

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

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

  6. 避免频繁创建和删除临时表,以减少系统表资源的消耗。
    临时表并不是不可使用,适当地使用它们可以使某些例程更有效,例如,当需要重复引用大型表或常用表中的某个数据集时。但是,对于一次性事件,最好使用导出表。

  7. 在新建临时表时,如果一次性插入数据量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,
    以提高速度;如果数据量不大,为了缓和系统表的资源,应先create table,然后insert

  8. 如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先 truncate table ,然后 drop table ,这样可以避免系统表的较长时间定。

  9. 尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写。
    使用基于游标的方法或临时表方法之前,应先寻找基于集的解决方案来解决问题,基于集的方法通常更有效。

  10. 与临时表一样,游标并不是不可使用。对小型数据集使用 FAST_FORWARD 游标通常要优于其他逐行处理方法,尤其是在必须引用几个表才能获得所需的数据时。
    在结果集中包括“合计”的例程通常要比使用游标执行的速度快。如果开发时间允许,基于游标的方法和基于集的方法都可以尝试一下,看哪一种方法的效果更好。

  11. 尽量避免大事务操作,提高系统并发能力。

  12. 尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理

参考:https://blog.csdn.net/jie_liang/article/details/77340905
Https://blog.csdn.net/weixin_40792878/article/details/81071584

您可能感兴趣的文档:

--结束END--

本文标题: 常见SQL编写和优化

本文链接: https://www.lsjlt.com/news/2847.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL常见的sql优化语句
    本篇内容介绍了“MySQL常见的sql优化语句”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!大批量插入数据...
    99+
    2024-04-02
  • 常见的SQL优化面试专题大全
    目录介绍:问:比如,现在有个面试官说,现在线上有个SQL执行很慢,你怎么优化?问:慢 SQL 语句的几种常见诱因?问:平时写SQL时该注意什么?有什么经验可谈?问:有哪些影响数据库性能的瓶颈?问:改善SQL性能涉及哪些步...
    99+
    2023-03-03
    sql优化面试题及答案 sql调优的几种方式 mysql优化面试题及答案
  • 常见的SQL优化面试题有哪些
    本篇内容介绍了“常见的SQL优化面试题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!介绍:无论您是创...
    99+
    2023-03-10
    sql
  • 如何实现MySQL底层优化:SQL语句优化的常见技巧和原则
    MySQL数据库作为一种常见的关系型数据库,随着数据库中数据量的增加和查询需求的变化,底层优化变得尤为重要。在进行MySQL底层优化的过程中,SQL语句优化是一项至关重要的工作。本文将讨论SQL语句优化的常见技巧和原则,并提供具体的代码示例...
    99+
    2023-11-09
    MySQL优化 SQL优化 技巧和原则
  • C++ 函数优化详解:优化原则和常见优化手法
    优化 c++++ 函数遵循原则:优化关键路径代码、关注热点函数、平衡性能与可读性。常见优化手法包括:内联函数消除函数调用开销;减少间接调用提高直接访问速度;优化循环提高效率;虚拟函数重写...
    99+
    2024-05-01
    优化 c++ 代码可读性
  • SQL Update的常见写法有哪些
    SQL Update语句是用来更新数据库表中的记录的,常见的写法有以下几种: 更新单个字段的值: UPDATE tab...
    99+
    2024-03-08
    SQL
  • MySQL中数据库优化的常见sql语句有哪些
    这篇文章主要介绍“MySQL中数据库优化的常见sql语句有哪些”,在日常操作中,相信很多人在MySQL中数据库优化的常见sql语句有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大...
    99+
    2024-04-02
  • C++中常见的编译优化问题解决方案
    C++中常见的编译优化问题解决方案摘要:在使用C++编写程序时,我们经常会遇到一些性能瓶颈,影响程序的运行效率。为了提高代码的执行效率,我们可以使用编译器进行优化。本文将介绍一些常见的编译优化问题及其解决方案,并给出具体的代码示例。一、循环...
    99+
    2023-10-22
    内联优化 (Inlining Optimization) 循环展开优化 (Loop Unrolling Optimiza
  • tomcat的常见优化有哪些
    这篇文章主要为大家展示了“tomcat的常见优化有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“tomcat的常见优化有哪些”这篇文章吧。Tomcat连接器协议优化Tomcat 连接器的三种...
    99+
    2023-06-03
  • MySQL常见优化方案汇总
    目录思考sql优化的几个地方,我把他做了个分类,方便理解key_len计算方式简单介绍一、优化点1:字段优化覆盖索引尽量用二、优化点2:where优化1.尽量全值匹配2.最...
    99+
    2024-04-02
  • Java开发者编写SQL语句时常见错误分别有哪些
    今天就跟大家聊聊有关Java开发者编写SQL语句时常见错误分别有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java开发者对于面向对象编程思维...
    99+
    2024-04-02
  • MySQL常见优化方案是什么
    MySQL常见优化方案是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。sql优化的几个地方select [字段 优化1]:主要是覆盖索引from []wher&#...
    99+
    2023-06-26
  • 优化常见的java排序算法
    目录冒泡排序原始的写法优化一优化二选择排序方法一方法二堆排序建大堆来实现堆排建小堆来实现堆排插入排序实现优化一优化二归并排序递归实现归并排序优化来看O(n)的排序当然除了基于比较的排...
    99+
    2024-04-02
  • 常见数据库优化面试题
    常见数据库面试题 一.在项目中如何定位慢查询 通过 druid 连接池的内置监控来定位慢 SQL。通过 MySQL 的慢查询日志查看慢 SQL。通过 show processlist,查看当前数据库 SQL 执行情况来定位慢 SQL。 二...
    99+
    2023-08-23
    数据库 mysql sql
  • Golang函数优化的常见方法
    go 函数优化的常见方法包括:避免不必要的分配,可通过池化或重用变量提升性能。选择高效的数据结构,如使用 map 代替 struct 可提高键值对查找效率。避免深度递归,若可行,可通过迭...
    99+
    2024-04-13
    golang 函数优化 堆栈溢出 键值对
  • 十种H5常见的优化方式
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-23
  • C++ 函数优化详解:避免常见的优化陷阱
    避免过早优化,专注于实际性能瓶颈。谨慎内联函数,避免代码膨胀和编译时间变长。遵循 const 正确性准则,避免意外修改输入/输出。始终确保在使用前初始化局部变量。考虑缓存一致性,使用 v...
    99+
    2024-05-04
    c++ 函数优化 同步机制
  • mysql常见的优化类型有哪些
    这篇文章主要介绍“mysql常见的优化类型有哪些”,在日常操作中,相信很多人在mysql常见的优化类型有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql常见的优化类型有哪些”的疑惑有所帮助!接下来...
    99+
    2023-06-20
  • 常见的HTML优化技巧有哪些
    这篇文章主要介绍了常见的HTML优化技巧有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇常见的HTML优化技巧有哪些文章都会有所收获,下面我们一起来看看吧。很显然HTML ...
    99+
    2024-04-02
  • sql优化常用方法是什么
    这篇文章将为大家详细讲解有关sql优化常用方法是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。sql优化常用的方法有:1、应尽量避免全表扫描,应考虑在wher ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作