efcore多表查询出错_如何提高sql查询的效率?
数据量大的情况下,不同的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查询的效率?相关推荐
- oracle function 写查询语句_五个 SQL 查询性能测试题,只有 40% 及格率,你敢来挑战吗?...
作者 | 董旭阳TonyDong,CSDN 博客专家 责编 | 唐小引 头图 | CSDN 下载自东方 IC 出品 | CSDN 博客 下面是 5 个关于索引和 SQL 查询性能的测试题:其中 4 个 ...
- 提高mysql查询速度_如何提高数据库查询速度
1.用程序中, 保证在实现功能的基础上,尽量减少对数据库的访问次数: 通过搜索参数,尽量减少对表的访问行数,最小化结果集,从而减轻网络负担: 能够分开的操作尽量分开处理,提高每次的响应速度: 在数据窗 ...
- 如何提高mysql查询效率_如何提高MySQL查询效率
MySQL由于它本身的小巧和操作的高效, 在数据库应用中越来越多的被采用.我在开发一个P2P应用的时候曾经使用MySQL来保存P2P节点,由于P2P的应用中,结点数动辄上万个,而且节点变化频繁,因此一 ...
- 一个 提高SQL 查询的讨论帖
idn(关键字),产品名称,产品数量... B表,有字段:idn,a_idn(记录A表的关键字),工序,工时... A表与B表是一对多的关系, 我想取到A表的明细及B表相关的总工时 sele aa.* ...
- Oracle提高SQL查询效率where语句条件的先后次序
(1)选择最有效率的表名顺序(只在基于规则的优化器中有效): Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处 ...
- 提高SQL查询效率(SQL优化)
我们要做到不但会写SQL,还要做到写出性能优良的SQL语句. (1)选择最有效率的表名顺序(只在基于规则的优化器中有效): Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句 ...
- sql多行插入insert多行无法分析查询文本_收藏!SQL语法全集合!
来源:PHP开源社区 本文针对关系型数据库的一般语法.限于篇幅,本文侧重说明用法,不会展开讲解特性.原理. 一.基本概念 数据库术语 数据库(database) - 保存有组织的数据的容器(通常是一个 ...
- SQL查询优化方法 提高SQL查询效率 数据库的哪些字段适合添加索引
如何提高sql的查询效率 在正确的字段上创建索引. 优化查询sql的写法(特别是where语句的写法). 一.数据库的哪些字段适合添加索引 表的某个字段值得离散度越高,该字段越适合选作索引的关键字.主 ...
- mysql及格率70以上_五个 SQL 查询性能测试题,只有 40% 及格率,你敢来挑战吗?| 原力计划...
作者 | 董旭阳TonyDong,CSDN 博客专家 责编 | 唐小引 头图 | CSDN 下载自东方 IC 出品 | CSDN 博客 下面是 5 个关于索引和 SQL 查询性能的测试题:其中 4 个 ...
最新文章
- 看到这些代码,我自叹不如!!!
- 面向对象和基于对象的区别
- python流程控制语句-python学习 流程控制语句详解
- SpringCloud(8)微服务监控Spring Boot Admin
- 【百战GAN】新手如何开始你的第一个生成对抗网络(GAN)任务
- php代码常见的变量缩写,PHP代码简洁之道——变量部分
- SpringBoot里slf4j日志功能的默认实现
- stacktraces_Stacktraces告诉了事实。 但事实并非如此。
- 从零开始的前端异次元生活
- 装饰者模式的应用:react高阶组件和ES6 装饰器
- x509证书、openssl、go生成证书
- 树莓派RaspberryPi Zero W 快速安装tips
- 判断设备访问类型是PC端还是WAP端
- (root用户)bash: ./xx: Permission denied解决方法
- 完美用Nlite添加ACHI SATA驱动至XP镜像
- H265摄像头如何实现网页直播
- MyCat Catlet实现 详解
- 「技术分享」TSINGSEE青犀视频云存储架构的设计和特点
- C# 读取Excel转换为DataTable的几种常见方式及实现步骤
- WP博客微信小程序的美化更新
热门文章
- R可视化散点图并进行特殊目标样本点的标记
- SQL语法中drop,delete与truncate的区别
- GBDT家族:GBDT家族成员的演进路劲、xgboost模型、lightGBM、LightGBM 相对于 XGBoost 的优点、catboost、xgboost、catboost、lightGBM对
- L1正则化为什么又叫做稀疏因子?
- 利用计算机技术执行去自动化,计算机技术和自动化的关系.doc
- c语言文件 写入 换行,关于文件操作,碰到空格就换行
- python 视频剪裁,剪切,合并
- 【MySQL】(图解)快速理解内连接、外连接、左连接、右连接
- 视频动作识别--Convolutional Two-Stream Network Fusion for Video Action Recognition
- java.lang.UnsatisfiedLinkError:no jhdf5 in java.library.path问题的解决