SQL语句的优化
SQL语句级别的优化是我们实际工作中接触最多的,几乎所有的数据库应用说到底都是SQL语句的具体执行,因此如何对SQL脚本本身进行优化,提高执行效率就显得尤为重要。以下是一些通用的设计原则。
(1)使用select语句查询时,尽量不要使用select * 语句,而是应该指明具体要查询的字段,提取的字段数量越少,查询的速度越快。
(2)使用Order by 语句排序时,最好按照聚簇索引的字段排序,这样会大大提高排序的速度。
(3)尽量不要使用or关键字,或是 in(),否则会引起全表扫描,大大减低数据的检索速度。
比如数据量较大时(几十万记录),不要使用如下的SQL语句:
Select count(*) from student where id in('0','1')
Select count (*) from student where id='0' or id='1'
应该拆分成如下两条SQL语句:
select count(*) from student where id ='0'
select count (*)from student where id='1'
(4)对笛卡尔积,游标,循环要谨慎使用。
(5)存储过程,函数,包,触发器等尽量不要超过1000行,之间调用不要复杂。
(6)检查嵌套,递归,子查询的深度,最好不要超过3层。
(7)order by ,group by ,distinct 这些语句运行时相对来说会占用较大的内存,使用时需要加以注意。
(8)尽量少用NOt,包括NOT in 和not exist
(9)between 1 and 10 要比 in (1,10)字段执行效率高。
(10)当where语句后有多个查询条件时,应该将数据量大的表的查询过滤条件放在前面。
(11)like 语句是很耗时的,如果条件允许的话,可以使用功能相同的语句代替,比如
select name from student where ID like '100???'这条语句,会对全表进行顺序扫描;可以改为 select name from student where ID >100000,这样在执行查询时就会利用索引来查询,显然会大大提高速度。
(13)尽量不要再SQL语句中进行对列的操作,包括数据库函数,计算表达式等,否则会导致全表扫描,要尽可能将操作移至等号右边。
&n
相关文档:
Select TOP N * from TABLE Order By NewID()
--Access:
Select TOP N * from TABLE Order By Rnd(ID)
Rnd(ID) 其中的ID是自动编号字段,可以利用其他任何数值来完成,比如用姓名字段(UserName)
Selec ......
--SQL Server:
Select TOP N * from TABLE Order By NewID()
--Access:
Select TOP N * from TABLE Order By Rnd(ID)
Rnd(ID) 其中的ID是自动编号字段,可以利用其他任何数值来完成,比如用姓名字段(U ......
注:出处已不可考,不过,其中不少语句还是蛮精妙的。
Student(S#(学号),Sname(姓名),Sage(年龄),Ssex(性别)) 学生表
Course(C#(课程编号),Cname(课程名称),T#(老师编号)) 课程表
SC(S#(学号),C#(课程编号),score(分数)) 成绩表
Teacher(T#(老师编号),TnameSname(姓名)) 教师表
问题:
1、查询“001” ......