代码之家  ›  专栏  ›  技术社区  ›  Jamie Kitson

停止SQL Server在WHERE子句中计算无用的上/下值?

  •  3
  • Jamie Kitson  · 技术社区  · 15 年前

    尽管SQL Server在WHERE子句中的大小写不匹配,但在似乎非常昂贵的WHERE子句中,它仍然支持上/下。是否可以指示SQL Server忽略WHERE子句中的上/下?

    这似乎是一个毫无意义的问题,但是能够为Oracle和SQL Server编写一个查询是非常好的。

    谢谢,杰米

    2 回复  |  直到 15 年前
        1
  •  4
  •   Ed Harper    15 年前

    对您的问题的简短回答是否-您不能让SQL Server神奇地忽略 WHERE 条款。

    正如其他人所说,性能问题是由于在SQL Server上使用 在哪里? 子句禁止使用索引并强制表扫描。

    为了获得最佳性能,需要维护两个查询,一个用于每个RDBMS平台(在应用程序中或在存储过程或视图等数据库对象中)。考虑到Oracle和SQL Server之间存在如此多的其他功能方面的差异,您很可能最终还是会这样做,如果不是这样做的话,还需要做其他事情。

        2
  •  0
  •   Rob Farley    15 年前

    所以你的意思是:

    WHERE YourColumn = @YourValue collate Latin1_General_BIN
    

    但是,如果您希望它在不使用collate关键字的情况下工作,您可以将列的排序规则设置为不区分大小写的内容。

    请记住,您的列上的索引将使用特定的排序规则,因此,如果您在WHERE子句中指定排序规则(而不是在列本身),则索引将不太有用。我把这比作几年前我飞到瑞典的时候,在地图上找不到“瓦特雷斯”,因为我认为这些字母 a 实际上,他们身上有重音,而且位于字母表的末尾。当我试图使用错误的排序规则时,地图后面的索引不太好。