我的编程空间,编程开发者的网络收藏夹
学习永远不晚

sql查询语句优化

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

sql查询语句优化


	sql查询语句优化
[数据库教程]

sql查询语句优化

1、对查询进行优化,应尽量避免全表扫描

a、 where  order by 涉及的列上建立索引

b、 尽量避免在 where 子句中对字段进行 null 值判断,可以将null值设置默认值0等,如:select id from t where num is null变为select id from t where num=0

c、 尽量避免在 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

d、 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

e、 应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:    

select id from t where num/2=100    

应改为:    

select id from t where num=100*2

f、 模糊查询也会全表扫描,如:select id from t where name like ‘%abc%‘

g、 应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:    

select id from t where substring(name,1,3)=‘abc‘--name以abc开头的id    

应改为:    

select id from t where name like ‘abc%‘ 

2、正确使用索引

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

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

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

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

e、like %keyword 索引失效,使用全表扫描。但可以通过翻转函数+like前模糊查询+建立翻转函数索引=走翻转函数索引,不走全表扫描。  
like %keyword% 索引失效,也无法使用反向索引。

like keyword% 索引有效。(后模糊匹配才能让索引有效)

3、尽量使用数字型字段

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

4、尽可能的使用 varchar 代替 char

因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些

5、很多时候用 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)

6、任何地方都不要使用 select * from t

用具体的字段列表代替“*”,不要返回用不到的任何字段

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

8、合理使用临时表

a、临时表并不是不可使用,适当地使用它们可以使某些例程更有效,例如,当需要重复引用大型表或常用表中的某个数据集时。但是,对于一次性事件,最好使用导出表

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

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

9、合理使用游标

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

b、使用基于游标的方法或临时表方法之前,应先寻找基于集的解决方案来解决问题,基于集的方法通常更有效

c、尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写

10、尽量避免大事务操作,提高系统并发能力

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

12、不要写一些没有意义的查询,如需要生成一个空表结构:    

select col1,col2 into #t from t where 1=0    

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

create table #t(...)

 

 

 

 

 

 

sql查询语句优化

原文地址:https://www.cnblogs.com/zoe-blog/p/13312757.html

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

sql查询语句优化

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

下载Word文档

猜你喜欢

sql查询语句优化

sql查询语句优化1、对查询进行优化,应尽量避免全表扫描a、 where 及 order by 涉及的列上建立索引b、 尽量避免在 where 子句中对字段进行 null 值判断,可以将null值设置默认值0等,如:将select id from t wher
sql查询语句优化
2016-05-19

sql语句查询慢如何优化

优化 SQL 查询性能的方法有很多,以下是一些常见的优化技巧:1. 索引优化:使用适当的索引可以大大提高查询性能。考虑创建索引以支持经常使用的 WHERE 子句、连接条件和排序/分组操作。2. 写出高效的查询:编写高效的 SQL 查询是提高
2023-09-27

mysql查询语句优化

这篇说下mysql查询语句优化是否请求了不需要的数据典型案例:查询不需要的记录,多表关联时返回全部列,总是取出全部列,重复查询相同的数据。是否在扫描额外的记录最简单的衡量查询开销的指标。响应数据扫描的行数返回的行数 访问类型在评估查询开销
2022-05-11

MySQLexplain根据查询计划去优化SQL语句

MySQL是一种常见的关系型数据库管理系统,常被用于各种应用程序中存储数据,当涉及到大量的数据时,就需要MySQL的explain功能来帮助优化,本文将详细介绍MySQL的explain功能,感兴趣的朋友可以参考阅读
2023-05-14

MySQL explain根据查询计划去优化SQL语句

目录一、什么是mysql explain二、如何使用MySQL explainMySQL是一种常见的关系型数据库管理系统,常被用于各种应用程序中存储数据。当涉及到大量的数据时,数据库查询的性能就成了关键因素,这时就需要MySQL的expla
2023-04-07

MySQL explain根据查询计划去优化SQL语句

本篇内容介绍了“MySQL explain根据查询计划去优化SQL语句”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!MySQL是一种常见的关
2023-07-05
2024-04-02

MySQL 查询语句优化的实现

子查询优化将子查询改变为表连接,尤其是在子查询的结果集较大的情况下;添加复合索引,其中复合索引的包含的字段应该包括 where 字段与关联字段;复合索引中的字段顺序要遵守最左匹配原则;mysql 8 中自动对子查询进行优化;现有两个表
2023-04-20

SQLite中怎么优化查询语句

要优化SQLite查询语句,可以使用以下方法:创建合适的索引:在查询经常使用的列上创建索引,可以加快查询速度。可以使用CREATE INDEX语句来创建索引。使用EXPLAIN语句分析查询计划:使用EXPLAIN语句可以查看SQLite优
SQLite中怎么优化查询语句
2024-03-12

优化 SQL 查询

在编写查询时,我们应该始终花时间找到编写查询的最佳方式。 有时,这可能意味着使用表面上看起来速度不快但实际上速度很快的方法。 查询优化对于拥有高效的网站至关重要。虽然查询优化也适用于报告和分析,但作为 web 服务一部分运行的查询是网站用户
优化 SQL 查询
2024-10-14

常用sql语句查询

oracle常用经典SQL查询常用SQL查询: 1、查看表空间的名称及大小 select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_sizefrom dba_tablespaces t, dba

	常用sql语句查询
2019-10-10

编程热搜

目录