数据量大的情况下,不同的SQL语句,消耗的时间相差很大。按下面方法可以提高查询的效果。

1. select子句中尽量避免使用*

select子句中,*是选择全部数据的意思。比如语句:“select * from 成绩表”,意思是选择成绩表中所有列的数据。

在我们平时的练习中,往往没有那么多数据,所以很多同学会图方便使用*。而在处理公司事务时,动辄十万、百万,甚至上千万的数据,这个时候再用*,那么接下来的几分钟就只能看着电脑屏幕发呆了。

所以,在我们平常的练习中,就要养成好的习惯,最后需要哪些列的数据,就提取哪些列的数据。尽量少用*来获取数据。

另外,如果select * 用于多表联结,会造成更大的成本开销。

2. where子句比较符号左侧避免函数

尽量避免在where条件子句中,比较符号的左侧出现表达式、函数等操作。因为这会导致数据库引擎进行全表扫描,从而增加运行时间。

举个例子,下图是10名学生的成绩表,老师突然发现因为参考答案出错,给所有人都少加了5分,现在需要查询:给每人加5分后,成绩依然在90分以上的同学的学号。

按照题目的思路直接书写,“给每人加5分后,成绩90分以上”的条件很多人会这样写:

where 成绩 + 5 › 90 (表达式在比较符号的左侧)

优化方法:

where 成绩 › 90 – 5(表达式在比较符号的右侧)

所以,为了提高效率,where子句中遇到函数或加减乘除的运算,应当将其移到比较符号的右侧。

3. 尽量避免使用in和not in

in和not in也会导致数据库进行全表搜索,增加运行时间。

比如,我想看看第8、9个人的学号和成绩,大多数同学会用这个语句:

select 学号, 成绩

from 成绩表

where 学号 in (8, 9)

这一类语句,优化方法如下:

select 学号, 成绩

from 成绩表

where 学号 between 8 and 9

4. 尽量避免使用or

or同样会导致数据库进项全表搜索。在工作中,如果你只想用or从几十万语句中取几条出来,是非常划不来的,怎么办呢?下面的方法可替代or。

从成绩表中选出成绩是是88分或89分学生的学号:

select 学号

from 成绩表

where 成绩 = 88 or 成绩 = 89

优化后:

select 学号 from 成绩表 where 成绩 = 88

union

select 学号 from 成绩表 where 成绩 = 89

语句虽然变长了一点,但处理大量数据时,可以省下很多时间,是非常值得的。

5.使用limit子句限制返回的数据行数

如果前台只需要显示15行数据,而你的查询结果集返回了1万行,那么这适合最好使用limt子句来限制查询返回的数据行数。

【总结】

拥有好习惯,未来在工作中,面对不同的数据量,就可以游刃有余地选择不同的方法来降低完成时间,从而提升工作效率。

efcore多表查询出错_如何提高sql查询的效率?相关推荐

  1. oracle function 写查询语句_五个 SQL 查询性能测试题,只有 40% 及格率,你敢来挑战吗?...

    作者 | 董旭阳TonyDong,CSDN 博客专家 责编 | 唐小引 头图 | CSDN 下载自东方 IC 出品 | CSDN 博客 下面是 5 个关于索引和 SQL 查询性能的测试题:其中 4 个 ...

  2. 提高mysql查询速度_如何提高数据库查询速度

    1.用程序中, 保证在实现功能的基础上,尽量减少对数据库的访问次数: 通过搜索参数,尽量减少对表的访问行数,最小化结果集,从而减轻网络负担: 能够分开的操作尽量分开处理,提高每次的响应速度: 在数据窗 ...

  3. 如何提高mysql查询效率_如何提高MySQL查询效率

    MySQL由于它本身的小巧和操作的高效, 在数据库应用中越来越多的被采用.我在开发一个P2P应用的时候曾经使用MySQL来保存P2P节点,由于P2P的应用中,结点数动辄上万个,而且节点变化频繁,因此一 ...

  4. 一个 提高SQL 查询的讨论帖

    idn(关键字),产品名称,产品数量... B表,有字段:idn,a_idn(记录A表的关键字),工序,工时... A表与B表是一对多的关系, 我想取到A表的明细及B表相关的总工时 sele aa.* ...

  5. Oracle提高SQL查询效率where语句条件的先后次序

    (1)选择最有效率的表名顺序(只在基于规则的优化器中有效): Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处 ...

  6. 提高SQL查询效率(SQL优化)

    我们要做到不但会写SQL,还要做到写出性能优良的SQL语句. (1)选择最有效率的表名顺序(只在基于规则的优化器中有效): Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句 ...

  7. sql多行插入insert多行无法分析查询文本_收藏!SQL语法全集合!

    来源:PHP开源社区 本文针对关系型数据库的一般语法.限于篇幅,本文侧重说明用法,不会展开讲解特性.原理. 一.基本概念 数据库术语 数据库(database) - 保存有组织的数据的容器(通常是一个 ...

  8. SQL查询优化方法 提高SQL查询效率 数据库的哪些字段适合添加索引

    如何提高sql的查询效率 在正确的字段上创建索引. 优化查询sql的写法(特别是where语句的写法). 一.数据库的哪些字段适合添加索引 表的某个字段值得离散度越高,该字段越适合选作索引的关键字.主 ...

  9. mysql及格率70以上_五个 SQL 查询性能测试题,只有 40% 及格率,你敢来挑战吗?| 原力计划...

    作者 | 董旭阳TonyDong,CSDN 博客专家 责编 | 唐小引 头图 | CSDN 下载自东方 IC 出品 | CSDN 博客 下面是 5 个关于索引和 SQL 查询性能的测试题:其中 4 个 ...

最新文章

  1. 看到这些代码,我自叹不如!!!
  2. 面向对象和基于对象的区别
  3. python流程控制语句-python学习 流程控制语句详解
  4. SpringCloud(8)微服务监控Spring Boot Admin
  5. 【百战GAN】新手如何开始你的第一个生成对抗网络(GAN)任务
  6. php代码常见的变量缩写,PHP代码简洁之道——变量部分
  7. SpringBoot里slf4j日志功能的默认实现
  8. stacktraces_Stacktraces告诉了事实。 但事实并非如此。
  9. 从零开始的前端异次元生活
  10. 装饰者模式的应用:react高阶组件和ES6 装饰器
  11. x509证书、openssl、go生成证书
  12. 树莓派RaspberryPi Zero W 快速安装tips
  13. 判断设备访问类型是PC端还是WAP端
  14. (root用户)bash: ./xx: Permission denied解决方法
  15. 完美用Nlite添加ACHI SATA驱动至XP镜像
  16. H265摄像头如何实现网页直播
  17. MyCat Catlet实现 详解
  18. 「技术分享」TSINGSEE青犀视频云存储架构的设计和特点
  19. C# 读取Excel转换为DataTable的几种常见方式及实现步骤
  20. WP博客微信小程序的美化更新

热门文章

  1. R可视化散点图并进行特殊目标样本点的标记
  2. SQL语法中drop,delete与truncate的区别
  3. GBDT家族:GBDT家族成员的演进路劲、xgboost模型、lightGBM、LightGBM 相对于 XGBoost 的优点、catboost、xgboost、catboost、lightGBM对
  4. L1正则化为什么又叫做稀疏因子?
  5. 利用计算机技术执行去自动化,计算机技术和自动化的关系.doc
  6. c语言文件 写入 换行,关于文件操作,碰到空格就换行
  7. python 视频剪裁,剪切,合并
  8. 【MySQL】(图解)快速理解内连接、外连接、左连接、右连接
  9. 视频动作识别--Convolutional Two-Stream Network Fusion for Video Action Recognition
  10. java.lang.UnsatisfiedLinkError:no jhdf5 in java.library.path问题的解决