【问题标题】:SQL 2005 T-SQL programming - possible pitfalls to be aware ofSQL 2005 T-SQL 编程 - 需要注意的可能陷阱
【发布时间】:2010-10-07 05:19:51
【问题描述】:

您可能知道 Halloween problem,如果使用不当,SQL 游标可能会成为您的噩梦。

如果不仔细使用 SQL 2005 功能,可能会引入哪些其他细微问题(难以调试和检测)?

【问题讨论】:

    标签: tsql


    【解决方案1】:

    首先,除非绝对没有其他方法,否则不应使用游标。几乎所有事情都可以根据设置完成。数字表将对此有所帮助。 检查 XACT_STATE 以确定交易。还有很多事情需要注意

    在这里阅读一些SQL Server Programming Pitfalls

    【讨论】:

      【解决方案2】:

      试图将 SQL 视为编程环境可能是最大的错误。 SQL 就是声明你想要什么。如果您曾经使用过游标或循环结构,请问问自己是否有办法将其转换为 INSERT/UPDATE

      【讨论】:

        【解决方案3】:
        1. 对可以包含 NULLS 的列执行 NOT IN 不会产生结果。
        2. 对可以包含空值的列执行 count(cloumn) 只会计算非空值。

        【讨论】:

          【解决方案4】:

          我想到了许多问题:

          • NULL 处理 - 很多人很难理解 NULL 是一种与“0”(零)非常不同的野兽,并且您通常无法比较 IF myCol = NULL - 您需要使用“IS NULL”或“IS非空”等等。

          NULL 有它的位置——当它真的意味着没有选择或值时——但在许多情况下,你可能最好定义一个默认值(在 INT 列上通常为“0”),它表示“没有” " 或 "没有选择" 等等。

          • 索引 - 很多关于索引的混淆以及优点和缺点、优点和缺点是什么。为每一列建立索引是没有意义的——即使你已经确定了在 SELECT ... WHERE 子句中经常使用的列,如果列的选择性不够小(一些专家说,如果列不会选择 1% 或更少的数据,不要打扰索引),通常它不会真正有帮助,因为全表扫描(索引扫描)会更便宜。

          此外,使用索引 - 如果您在 WHERE 子句中使用 T-SQL 函数,例如“UPPER(myCol) = (value)”或“LEFT(myCol, 10) = (value)”,那么您将不会也可以查看索引的预期收益。

          编制索引可以极大地提升您的表现 - 但要明智地编制索引!

          【讨论】:

            猜你喜欢
            • 2015-02-20
            • 2011-07-10
            • 2012-03-05
            • 2011-11-19
            • 1970-01-01
            • 2011-07-02
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多