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
相关文档:
以下说明均针对企业版或者开发版;
1.开启sql server 实例的远程连接;
“开始”-->“程序”-->“Microsoft SQL Server 2005”-->“配置工具”-->“SQL Server 外围应用配置器”-->“服务和连接的外围应用配置器”--> ......
标准的 SQL 的解析顺序为:
(
1
).
from
子句, 组装来自不同数据源的数据
(
2
).
WHERE
子句, 基于指定的条件对记录进行筛选
(
3
).
GROUP
BY
子句, 将数据划分为多个分组
(
4
).使用聚合函数进行计算
(
5
).使用
HAVING
子句筛选分组
(
6
).计算所有的表达式
......
C#中操作Oracle时的SQL语句参数的用法
OracleTransaction myTrans ;
conn.Open();
myTrans =conn.BeginTransaction(IsolationLevel.ReadCommitted) ......
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[pagination]
@tblName varchar(255), -- 表名
@strGetFields varchar(1000), -- 需要返回的列
@fldName varchar(255), -- 排序的字段名
@PageSize int, -- 页尺寸
@PageIndex int, -- 页码
@OrderType bit, -- 设置排序类型, 非 0 值 ......
在数据库查询数据时,我们经常使用一些函数,使我们的查询更加方便快捷,下面就把SQL Server中我们常用的几个函数给列举出来,供参考。
1.字符串函数用户控制返回给用户的字符串,这些功能仅用于字符型数据。
2.日期函数用于操作日期值,我们不能直接对日期运用数学函数。
3.数学函数用于对数值进行代数运算。
4.系统函 ......