易截截图软件、单文件、免安装、纯绿色、仅160KB

如何写有效率的SQL查询


[转载]http://www.cnblogs.com/cn_wpf/,非常感谢Nineteen@newsmth 的分分享。 
写有效率的SQL查询(I)
大型系统的生产环境,一般情况下,我们评价一条查询是否有效率,更多的是关注逻辑IO(至于为什么,回头补一篇)。我们常说,“要建彪悍的索引”、“要写高效的SQL”,其实最终目的就是在相同结果集情况下,尽可能减少逻辑IO。
1.1     where条件的列上都得有统计信息。
没统计信息SQLServer就无法估算不同查询计划开销优劣,而只能采用最稳妥的Scan(不管是table scan还是clustered index scan)。一般情况下我们不会犯这种错误——where条件里不使用非索引列是个常识。索引上的统计信息是无法删除的。
1.2     尽量不使用不等于(!=)或者NOT逻辑运算符。
这条规则被广为传颂,原因据联机文档和百敬同学的书讲,也是SQLServer无法评估不同查询计划开销的优劣。但是SqlServer2k5聪明了很多,试验发现尽管用了!=或者not,查询还是会被优化。如下:
create table tb1
(
    col1 int identity(1,1) primary key,
    col2 int not null,
    col3 varchar(64) not null
)
create index ix_tb1_col2 on tb1
(
    col2
)
create index ix_tb1_col3 on tb1
(
    col3
)
declare @f int
set @f = 0
while @f < 9999
begin
    insert into tb1 (col2, col3) values(1, 'ssdd')
    set @f = @f + 1
end
insert into tb1 (col2, col3) values(0, 'aadddd')
insert into tb1 (col2, col3) values(2, 'bbddd')
insert into tb1 (col2, col3) values(3, 'bbaaddddddaa')
通过上述代码,各位可以看到数据分布。col2值为1的有9999条;col2值为0、2、3的分别有1条。
按照本条规则,!= 和NOT带来的应该是个scan操作,但实际情况是:
   
 
SQL


相关文档:

SQL TRIM的用法

SQL 中的 TRIM 函数是用来移除掉一个字串中的字头或字尾。最常见的用途是移除字首或字尾的空白。这个函数在不同的资料库中有不同的名称:
MySQL: TRIM(), RTRIM(), LTRIM()
Oracle: RTRIM(), LTRIM()
SQL Server: RTRIM(), LTRIM()
各种 trim 函数的语法如下:
TRIM([[位置] [要移除的字串] from ] 字串): [位置] ......

SQL ALTER TABLE的用法

在表格被建立在资料库中后,我们常常会发现,这个表格的结构需要有所改变。常见的改变如下:
加一个栏位
删去一个栏位
改变栏位名称
改变栏位的资料种类
以上列出的改变并不是所有可能的改变。ALTER TABLE 也可以被用来作其他的改变,例如改变主键定义。
ALTER TABLE 的语法如下:
ALTER TABLE "table_name" ......

SQL DELETE from的用法

在某些情况下,我们会需要直接由数据库中去除一些资料。这可以藉由 DELETE from 指令来达成。它的语法是:
DELETE from "表格名"
WHERE {条件}
以下我们用个实例说明。假设我们有以下这个表格:
Store_Information 表格
store_name
Sales
Date
Los Angeles
$1500
Jan-05-1999
San Diego
$250
Jan-0 ......

sql server代理 心雨之家

这几天写存储过程,每天定时差异备份,并自动发邮件给操作人修改要修改的内容。 在这里写出sql server的代理操作,接下来把写的发邮件的存储过程也发出。大家作个参考  
如果在sql server 里需要定时或者每隔一段时间执行某个存储过程或3200字符以内的sql语句时,可以用管理->sql server代理->作业来实现。
  ......

sql语句 得到 sql server 表中列的类型和说明

通过Sql语句获得 列的类型和说明:
  得到的表头:表名|列名|类型|说明
  1:针对sql server 2000,在sql2000中,使用:sysobjects,syscolumns和sysproperties表
    SELECT o.name as table_name,c.name AS col_name,type_name(c.xtype) AS type_name,isnull(p.value,'') AS col_Pro ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号