欢迎投稿

今日深度:

SQL命令优化需要记住的9点事项,sql命令9点事项

SQL命令优化需要记住的9点事项,sql命令9点事项


与数据库交互的基本语言是sql,数据库每次解析和执行sql语句多需要执行很多步骤。以sql server为例,当数据库收到一条查询语句时,语法分析器会扫描sql语句并将其分成逻辑单元(如关键词、表达式、运算符和标识符)并生成查询树,最后查询优化器将分析所有可以访问数据库的源表的方法,从中选择一组返回结果集最快且消耗资源较少的步骤。查询树随即进行更新以准确记录这个步骤,接着交由数据库引擎开始执行,然后将查询结果返回给用户。可见数据库引擎每次执行sql命令都会有很大的开销,如果提交的sql质量不高甚至有逻辑错误就会造成无谓的开销和时间浪费。为了避免这种情况,在使用sql命令时应注意以下原则:

   1、字段提取要按照“需多少、提多少”的原则,避免“select *”,尽量使用“select 字段1,字段2,字段3 ...”。实践证明,每少提取一个字段,数据库提取速度就会有相应的提升。提升的速度还要由你舍弃的字段大小来决定。

   2、尽量使用exists代替select count(*) 来判断是否存在记录。优化器优化exists谓词时支持短路功能。只要找到一行,不需要再扫描其他行就可以确定该表是否包涵行了。count函数只有在统计表中所有行的行数时使用。

   3、尽量使用(not) exists代替(not) in 操作,in的sql性能总是比较低的。

  --语句

  select dname,deptno from dept where deptno not in(select deptno from emp where dept.deptno=emo.deptno)

  --语句

  select dname,deptno from dept where not exists(select deptno from emp where dept.deptno=emo.deptno)

   4、尽量使用not in,可以用left outer join代替它。

   5、尽量不要使用or,使用or会引起全表扫描,将大大降低查询效率

   6、注意where子句的写法,必须考虑语句顺序,应该根据索引顺序、范围大小来确定条件子句的前后顺序,尽可能地让字段顺序与索引顺序一致,范围从大到小。

   7、尽量使用“>=“,不用使用”>“

   8、在编写sql语句之前了解表的索引结构。有效地利用索引能够避免不必要的全表扫描,缩短查询时间。应该避免在where子句中使用is null、<>、!=、not、 not exist、not in、not like等命令,他们通常会引起全表扫描导致索引无效。

   9、在where 子句中,任何对列的操作(函数、计算等)讲导致索引失效,这些操作应该尽可能地移至等号右边,如where substring(id,1,1)=‘a‘,应该写成where id like 'a%‘;where result*10> 30应该写成where result >30;

对sql命令进行优化的基本原则是尽量减少类型转换和计算,充分利用表索引,减少全表扫描的次数。


SQL命令的优化

select * from emp where ename='SMITH'
这句相当于是直接找到ename='SMITH'的条数据。

select * from emp where ename like '%H'
这个相当于拿每一条去比较

哪个快,显而易见
 

一份比较基础的Access的SQL命令大全

单一查询:
(1)select * from 表名
(2)select 字段1,字段2,字段3.... from 表名
(3)select * from 表名 where 条件
(4)select 字段1,字段2,字段3.... from 表名 where 条件
(5)select top 5 字段 from 表名(显示某字段前几项)
(6)select distinct 字段 from 表名(不重复显示字段)
(7)select * from 表名 where 年龄 between 20 and 30(在...之间)多表查询---找出表与表之间的关系
eg:学生表(学号,姓名,年龄,性别,课程号)课程表(课程号,课程名)系表(学号,系名)
(8)select 表1.字段1,表1.字段2,表2.字段1,表2.字段2... from 表1,表2 where 表与表之间关系 and 条件
eg:select 学生表.姓名,课程表.课程名 from 学生表,课程表 where 学生表.课程号=课程表.课程号
(9)select T.字段1,T.字段2,S.字段1,S.字段2... from 表1 as T,表2 as S where 表与表之间关系 and 条件
eg:select T.姓名,S.课程名 from 学生表 as T,课程表 as S where T.课程号=S.课程号
(10)select 表1.字段1,表1.字段2,表2.字段1,表2.字段2... from 表1 inner join 表2 on 表与表之间关系 where 条件
eg:select 学生表.姓名,课程表.课程名 from 学生表 inner join 课程表 on 学生表.课程号=课程表.课程号(显示表与表对应数据)
(11)select 表1.字段1,表1.字段2,表2.字段1,表2.字段2,表3.字段1,表3.字段2 from 表1,表2,表3 where 表与表之间关系 and 表与表之间关系 eg:select 学生表.姓名,课程表.课程名,系表.系名 from 学生表,课程表,系表 where 学生表.课程号=课程表.课程号 and 学生表.学号=系表.学号
(12)select 表1.字段1,表1.字段2,表2.字段1,表2.字段2,表3.字段1,表3.字段2 from (表1 inner join 表2 on 表与表之间关系) inner join 表3 on 表与表之间关系
eg:select 学生表.姓名,课程表.课程名,系表.系名 from (学生表 inner join 课程表 on 学生表.课程号=课程表.课程号 )inner join 系表 on 学生表.学号=系表.学号
 

www.htsjk.Com true http://www.htsjk.com/Sql_Server/11634.html NewsArticle SQL命令优化需要记住的9点事项,sql命令9点事项 与数据库交互的基本语言是sql,数据库每次解析和执行sql语句多需要执行很多步骤。以sql server为例,当数据库收到一条查询语句时,语法...
评论暂时关闭