数据库优化大结:百万级数据优化策略与技巧.pdfVIP

  • 0
  • 0
  • 约6.16千字
  • 约 5页
  • 2026-01-22 发布于北京
  • 举报

数据库优化大结:百万级数据优化策略与技巧.pdf

网上关于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只有在运行时才会解析

局部变量,但优化程序不能将计划的选择推

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档