1. 排名函数与PARTITION BY 2. TOP 新用法 3. group by all 字段 / group by 字段 前者有点像left join ,right join的感觉,两者的主要区别体现在有where条件被过滤的聚合函数,会重新抓取出来放入查询的数据表中,只是聚合函数会根据返回值的类型用默认值0或者NULL来代替聚合函数的返回值。 当然从效率上来说,后者优于前者,就像inner join 优于left join一样 4. count(*)/count(0) 与 count(字段) 如果查询出来的字段中没有NULL值,那么俩种查询条件无任何区别,如果有NULL,后者统计出来的记录则是 总记录数 - NULL记录数 从性能上来说,前者高于后者,因为后者会逐行扫描字段中是否有NULL值,有NULL则不加以统计,减少了逻辑读的开销,从而性能达到提升 5. top n With ties 的用法 详见 举个例子 select top 1 with ties * from student order by score desc 等价于 select * from student where score=(select top 1 score from student order by score desc) 6. Apply运算符 7. INTERSECT和EXCEPT运算符 EXCEPT 只包含excpet关键字左边而且右边的结果集中不存在的那些行 INTERSECT 只包含两个结果集中都存在的那些行 往往EXISTS关键字可以代替上面的关键字,并且从性能中可以看到比他们更好,但EXCEPT/INTERSECT更便于阅读和直观。还是建议从性能更优入手。 8. 索引提高查询效率的原理 索引与EXISTS运算符在处理方式上很像,它们都可以在找到匹配值后立即退出查询运行,从而提高了查询性能 9. 表变量与临时表 主要区别: 1表变量不写日志,没有统计信息,频繁更改不会造成存储过程重新编译,不能建索引和统计信息,但是可以建立主键,变通实现索引查找,表变量不只是在内存中操作,数据量大的情况也会写tempdb,即物理磁盘的IO操作。 2.事务回滚对表变量无效(原因没有统计信息) 一般来说,数据量大,临时结果集需要和其他表二次关联用临时表 数据量小,单独操作临时结果集用表变量 . 脚本和批处理 Go不是一条T-SQL命令,他只能被编译工具Management Studio, SQLCMD识别,如果用第三方工具,不一定支持GO命令。例如ADO.NET,ADO。 . SQLCMD的运用 SQLCMD -Usa -Psa -Q "SELECT * FROM TESTDB.dbo.mytable" SQLCMD -Usa -Psa -i testsql.sql 运行文件里的SQL语句 . EXEC 使用说明 在执行过EXEC之后,可以使用类似@@ROWCOUNT这样的变量查看影响行数;不能在EXEC的参数中,针对EXEC字符串运行函数,例如cast(XX AS VARCHAR),对于EXEC的参数,只能用字符串相加,或者是整体的字符串。 . WAITFOR 的含义 WAITFOR TIME <'TIME'> 定时执行; WAITFOR DELAY <'TIME'> 延迟执行 . 存储过程 总结 1)用TRY/CATCH 替代 @@ERROR这种更科学,其一@@ERROR没有TRA/CATCH直观,其二遇到错误级别在-的错误,错误会使运行直接中断,导致@@ERROR判断错误与否无效。 2)使用RAISERROR 抛错 WITH LOG,当严重级别大于等于时,需要使用这个选项 WITH SETERROR,使其重写@@ERROR值,方便外部调用 WITH NOWAIT 立刻将错误通知给客户端 . 游标的复习 游标主要部分包括:1)声明 2)打开 3)使用或导航 4)关闭 5)释放 嵌套使用游标示例 @@fetch_status值的意义:0 FETCH 语句成功;-1 FETCH 语句失败或此行不在结果集中;-2 被提取的行不存在 FETCH [NEXT/PRIOR/FIRST/LAST] FROM ... INTO 针对游标为SCROLL类型的 . 游标的分类 1)静态游标(static):相当于临时表,会保存在tempdb里的私有表中,犹如快照表复制一份 a.一旦创建了游标,它就与实际记录相分离并不再维持任何锁 b.游标就是独立的,不再以任何方式与原始数据相关联 2)键集驱动的游标(keyset):需要在一定程度上感知对数据的修改,但不必了解最新发生的所有插入 a.表必须具有唯一索引 b.只有键集在tempdb中,而非整个数据集,对整个服务器性能产生有利的影响 c.能感知到对己是键集一部分的行所做的修改(改删),不能感知新增 3)动态游标(DYNAMIC) a.完全动态,非常敏感,对底层数据做的所有事情都会影响,性能当然也是最差的 b.它们会带来额外的并发性问题 c.每发出一次FETCH,都要重建游标 d.可允许运行没有唯一索引的表中,但弊端会造成SQLSERVER无法追踪它在游标的位置造成死循环,应避免这样使用 4)快进游标(FAST_FORWARD) 在许多情况下,FAST_FORWARD游标会隐式转换为其他游标类型
推荐整理分享SQL Server 总结复习 (二)(sql server 复制数据库具体操作图解),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:sql复用,sql server 复制表结构,sqlserver复制表结构和数据,sql server复制数据库的方法,sql server 复制数据库具体操作图解,sql server 复制表结构,sql复用,sqlserver复制表结构和数据,内容如对您有帮助,希望把文章链接给更多的朋友!
巧妙的自关联运用 第一列按照goodsid局部分组,然后在分组后的记录中按照audittime升序排序得到序号,从而显示某商品得第几次变迁。第二列是取该商品的最后变迁价格newP
编写SQL需要注意的细节Checklist总结 /*--注意:准备数据(可略过,非常耗时)CREATETABLECHECK1_T1(IDINT,C1CHAR())CREATETABLECHECK1_T2(IDINT,C1CHAR())DECLARE@IINTSET@I=1WHILE@I=BEGININSERTINTOCHECK1_T1SELECT@I,
SQL 查询性能优化 解决书签查找 先来看看什么是书签查找:当优化器所选择的非聚簇索引只包含查询请求的一部分字段时,就需要一个查找(lookup)来检索其他字段来满足请求。对一