- 0
- 0
- 约6.16千字
- 约 5页
- 2026-01-22 发布于北京
- 举报
网上关于SQL优化的很多,但是比较杂乱。近日有空整理了一下,写出来跟大家
一下,其中有错误和不足的地方,还请大家纠正补充。
这篇文章我花费了大量的时间查找资料、修改、排版,希望大家阅读,感觉好的话推荐
给的人,让的人看到、纠正以及补充。
1.对查询进行优化,要尽量避免全表扫描,首先应考虑在where及orderby涉及的列
上建立索引。
2.应尽量避免在where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而
进行全表扫描,如:
selectidfromtwherenumisnull
不要给数据库留NULL,尽可能的使用NOTNULL填充数据库.
备注、描述、评论之类的可以设置为NULL,其他的,不要使用NULL。
不要以为NULL不需要空间,比如:char(100)型,在字段建立时,空间就固定了,不管
是否值(NULL也包含在内),都是占用100个字符的空间的,如果是varchar这样
的变长字段,null不占用空间。
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
selectidfromtwherenum=0
3.应尽量避免在where子句中使用!=或操作符,否则将引擎放弃使用索引而进行全
表扫描。
4.应尽量避免在where子句中使用or来连接条件,如果一个字段有索引,一个字段没
有索引,将导致引擎放弃使用索引而进行全表扫描,如:
selectidfromtwherenum10orName=admin
可以这样查询:
selectidfromtwherenum=10
unionall
selectidfromtwhereName=admin
5.in和notin也要慎用,否则会导致全表扫描,如:
selectidfromtwherenumin(1,2,3)
对于连续的数值,能用ween就不要用in了:
selectidfromtwherenumween1and3
很多时候用exists代替in是一个好的选择:
selectnumfromawherenumin(selectnumfromb)
用下面的语句替换:
selectnumfromawhereexists(select1frombwherenum=a.num)
6.下面的查询也将导致全表扫描:
selectidfromtwherenamelike‘%abc%’
若要提高效率,可以考虑全文检索。
7.如果在where子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析
局部变量,但优化程序不能将计划的选择推
您可能关注的文档
- 2013-2014年度信息技术部招新与工作.pdf
- 高分子物理试题库:基本概念、判断与选择题.pdf
- 单元5看看第3课时:检查时间动画时间教学精要.pdf
- 科学感恩节活动方案:用行动表达感激.pdf
- 项目流程与关键文件概述.pdf
- 浙江省高三化学月考试题与说明.pdf
- 精品解析:北京市海淀区2025-2026学年九年级上学期期末语文试题(原卷版).docx
- 精品解析:北京市东城区汇文中学2025-2026学年八年级上学期期中语文试题(解析版).docx
- 通航建筑物运行管理办法2026修订版课件.pptx
- 政府投资基金投向评价管理办法(试行).pptx
- 浙江省温州市2024-2025学年七年级上学期语文期末考查卷.docx
- 精品解析:北京市建华实验学校2024-2025学年七年级下学期期中英语试题(原卷版).docx
- 精品解析:北京市通州区2024-2025学年七年级下学期期末考试英语试卷(原卷版).docx
- 精品解析:北京市回民学校2024-2025学年九年级上学期期中语文试题(解析版).docx
- 精品解析:北京市海淀区2025-2026学年九年级上学期期末语文试题(解析版).docx
- 精品解析:北京市东城区汇文中学2025-2026学年八年级上学期期中语文试题(原卷版).docx
- 精品解析:北京市回民学校2024-2025学年九年级上学期期中语文试题(原卷版).docx
- 精品解析:2024-2025学年广东省广州市从化区街口镇中心小学人教版五年级上册期中测试数学试卷(解析版).docx
- 精品解析:北京市通州区2024-2025学年七年级下学期期末考试英语试卷(解析版).docx
- 精品解析:北京市建华实验学校2024-2025学年七年级下学期期中英语试题(解析版).docx
原创力文档

文档评论(0)