SQL语句优化策略介绍


SQL语句优化策略介绍

1、避免全表扫描

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

2、避免判断null 值

应尽量避免在where 子句中对字段进行null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:

select id from t where num is null

可以在num 上设置默认值0,确保表中num 列没有null 值,然后这样查询:

select id from t where num=0

(免费学习视频教程推荐:mysql视频教程)

3、避免不等值判断

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

4、避免使用or 逻辑

应尽量避免在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 逻辑

in 和not in 也要慎用,否则会导致全表扫描,如:

select id from t1 where num in(select id from t2 where id > 10)

此时外层查询会全表扫描,不使用索引。可以修改为:

select id from t1,(select id from t1 where id > 10)t2 where t1.id = t2.id

此时索引被使用,可以明显提升查询效率。

6、注意模糊查询

下面的查询也将导致全表扫描:

select id from t where name like '%abc%'

模糊查询如果是必要条件时,可以使用select id from t where name like 'abc%'来实现模糊查询,此时索引将被使用。如果头匹配是必要逻辑,建议使用全文搜索引擎(Elastic search、Lucene、Solr 等)。

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 子句“=”左边注意点

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

Trae国内版 Trae国内版

国内首款AI原生IDE,专为中国开发者打造

Trae国内版 2045 查看详情 Trae国内版

10、组合索引使用

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

11、不要定义无异议的查询

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

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

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

create table #t(...)

12、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)

13、索引也可能失效

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

14、表格字段类型选择

尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。

这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。尽可能的使用varchar 代替char ,因为首先可变长度字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。

15、查询语法中的字段

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

16、索引无关优化

不使用*、尽量不使用union,union all 等关键字、尽量不使用or 关键字、尽量使用等值判断。表连接建议不超过5 个。如果超过5 个,则考虑表格的设计。(互联网应用中)表连接方式使用外联优于内联。外连接有基础数据存在。

如:A left join B,基础数据是A。A inner join B,没有基础数据的,先使用笛卡尔积完*连接,在根据连接条件得到内连接结果集。

大数据量级的表格做分页查询时,如果页码数量过大,则使用子查询配合完成分页逻辑。

Select * from table limit 1000000, 10
Select * from table where id in (select pk from table limit100000, 10)

相关文章教程推荐:mysql教程

以上就是SQL语句优化策略介绍的详细内容,更多请关注其它相关文章!


# 优化  # 这将  # 分页  # 笛卡尔  # 相关文章  # 句中  # 国内  # 应尽量  # 子句  # 介绍  # 策略  # SQL语句  # 中对  # 江西运营营销推广优化  # 沧州营销网站建设电话  # 企业小程序推广营销  # 番禺关键词排名工具  # 教育网站推广公司有哪些  # 关键词网站优化分析  # 盐山网站建设宣传  # 昆明网站建设收费贵吗  # 莆田网站建设服务周到  # 重庆网站推广咨询热线  # 则将 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 汽水音乐在线入口 汽水音乐网页端官方页面快速打开  Linux如何自动分析系统异常日志_Linux日志智能检测  被称为海蜈蚣的海洋动物是  CSS动画如何实现图标旋转并放大_transform rotate scale @keyframes实现  《优志愿》修改手机号方法  苹果官网国补入口在哪  太平年在哪个平台播出  告别繁琐SEO!如何使用SyliusSitemap插件自动化生成网站地图,提升搜索引擎排名  追剧达人如何发弹幕  iSpring三分屏制作教程  TikTok收藏夹无法删除视频如何解决 TikTok收藏管理优化方法  晨报|开发商暗示《空洞骑士:丝之歌》DLC开发中 《合金装备4》有望重制  CSS过渡如何实现按钮悬停效果_transition属性控制背景颜色变化  PHP与SQL实践:高效实现数据复制与特定列值修改  抖音号显示企业机构号是什么意思?企业机构号申请条件是什么?  Python中安全地将环境变量转换为整数的类型注解指南  汽水音乐在线听歌网页版 汽水音乐在线听歌网页版入口  基于 Flink 和 Kafka 实现高效流处理:连续查询与时间窗口  PPT智能排版生成入口 免费PPT内容自动生成平台  Word如何将文字快速转成表格 Word文本转换成表格功能使用技巧【效率】  纯CSS实现滚动时动态时间轴线条颜色填充效果  C++中std::thread和std::async的区别_C++并发编程与线程与异步任务比较  Win11怎么设置分辨率 Win11显示设置调整分辨率及刷新率修改  PDF文件去水印平台入口 PDF水印删除网址  VS Code中的Tailwind CSS IntelliSense插件使用技巧  PHP动态导航按钮:根据用户登录状态切换链接与文本  C++怎么解决数值计算中的精度问题_C++浮点数误差与数值稳定性分析  iQOO手机信号差网络不稳定怎么办 信号问题原因排查与增强设置【攻略】  VS Code源代码管理(SCM)视图的进阶使用技巧  Pydantic 中“schema”字段命名冲突的解决方案  《密马》发布账号方法  windows10怎么设置电源按钮_windows10按下电源键功能修改  鼠标没反应了怎么办 无线/有线鼠标失灵的解决方法【详解】  《飞猪旅行》购买汽车票方法  如何在解析前预检查XML文件的完整性? 比如检查文件大小或特定结束标签  动漫之家观看全集库 动漫之家免费资源网地址  mysql如何限制远程访问_mysql远程访问限制方法  《大学搜题酱》官网地址登录  西瓜视频怎么查看访客记录_西瓜视频访客记录查看方法  抖音火山版注销账号抖音会注销吗 抖音火山版与抖音账号注销关系  如何在Golang中处理表单文件上传_Golang 表单文件上传示例  iPhone14开启Apple TV遥控设置  sublime如何撤销关闭的标签页_sublime重新打开已关闭文件技巧  如何快速去除厨房重油污? 2025年最好用的厨房清洁剂推荐  百度地图离线地图无法加载如何解决 百度地图离线地图加载优化方法  《蓝色星原:旅谣》坐骑获取攻略  暴风影音官网正式版_暴风影音手机版官网下载安卓  圆通快递包裹轨迹查询 圆通速递快件实时位置跟踪  《东方财富》条件单关闭方法  动漫岛汉化官网网 动漫岛官方动漫汉化地址 

 2020-01-28

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.