SQL语句的优化以及索引的应用范围
SQL优化的原则是:将一次操作需要读取的BLOCK数减到最低。
调整不良SQL通常可以从以下几点切入:
检查不良的SQL,考虑其写法是否还有可优化内容;
检查子查询考虑SQL子查询是否可以用简单连接的方式进行重新书写;
检查优化索引的使用;
考虑数据库的优化器;
查询的一般规则
Ø 明确指出检索的字段,尽量减少对多余的列与多余的行读取。
禁止使用 select * from table ……的方式访问表。
Ø 在一个SQL语句中,如果一个where条件过滤的数据库记录越多,定位越准确,则该where条件越应该前移。
Ø 查询时尽可能使用索引覆盖。即对SELECT的字段建立复合索引,这样查询时只进行索引扫描,不读取数据块。
Ø 在判断有无符合条件的记录时不要用SELECT COUNT (*) 语句。 如:
BF: select count(*) from table where condition
在MSSQL和Sybase中,使用 if exists (select 1 from table_name where condition)性能较好,在Oracle中,使用select 1 from table_name where condition较好。
Ø 内层限定原则
在拼写SQL语句时,将查询条件分解、分类,并尽量在SQL语句的最里层进行限定,以减少数据的处理量。
应绝对避免在order by子句中使用表达式。
正确使用INDEX的SQL
如果和查询条件相关的column上有建index,以下几点能帮助SQL正确的使用index 。
Ø 避免显式或隐含的类型转换。
where子句中存在数据类型隐形转换的,如用Numeric 型和 Int型的列的比较时,不能使用index。
Ø WHERE子句中任何对列的操作都将无法使用index,它包括数据库函数、计算表达式等等,所以要尽量减少在=左边的列的运算。如:
BF:select staff_no, staff_name from staff_member where salary*2 <= 10000;
RP:select staff_no, staff_name from staff_member where salary <= 5000;
Ø WHERE子句中使用不等于(<>)运算的,将无法使用index。可以用union all改写。如:
BF:select staff_no, staff_name from staff_member where dept_no<>2001;
RP:sele
相关文档:
使用PowerDesigner生成数据库
建表SQL
脚
本时,尤其是Oracle数据库时,表名一般会带引号。其实加引号是PL/SQL的规范,数据库会严格按照“”中的名称建表,如果没有“”,会按照
ORACLE默认的设置建表(DBA
STUDIO里面),默认是全部大写,这样,在ORACLE数据库里的字段就如“Column_1&rdqu ......
http://inthirties.com:90/thread-1202-1-1.html
前面文章 ”v$sql,v$sqlarea,v$sqltext有什么区别“ 见 http://blog.csdn.net/inthirties/archive/2010/03/10/5364777.aspx
这里补充一下
补充:
1、查一下这些视图的定义你就能理解,它们的源都是一个。
SELECT view_definition from v$fixed_view_definiti ......
1、Session有什么重大BUG,微软提出了什么方法加以解决?
答:是iis中由于有进程回收机制,系统繁忙的话Session会丢失,可以用Sate server或SQL Server数据
库的方式存储Session不过这种方式比较慢,而且无法捕获Session的END事件。
2.产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。
C# ......
C#中操作Oracle时的SQL语句参数的用法
OracleTransaction myTrans ;
conn.Open();
myTrans =conn.BeginTransaction(IsolationLevel.ReadCommitted) ......
在数据库查询数据时,我们经常使用一些函数,使我们的查询更加方便快捷,下面就把SQL Server中我们常用的几个函数给列举出来,供参考。
1.字符串函数用户控制返回给用户的字符串,这些功能仅用于字符型数据。
2.日期函数用于操作日期值,我们不能直接对日期运用数学函数。
3.数学函数用于对数值进行代数运算。
4.系统函 ......