"<>"的SQL运算符名称是什么?

Gre*_*ser 35 sql operators

我很困惑,没有在谷歌找到.谁能告诉我什么是Sql <>运营商名称?

ste*_*ary 59

<> 是不等于,它是相同的 !=

  • @Kris如果你看一个执行计划,你会看到他们崩溃到同一个运营商.您的绩效差异是否可能是由于其他原因的新/不同计划造成的?你能证明一下这个问题的证据吗?http://dba.stackexchange.com/questions/155650/authoritative-source-that-and-are-identical-in-performance (16认同)
  • 我不相信该陈述是正确的,运算符在功能上是等价的,<>不是<和>的组合,它本身就是一个独特的运算符,不等于.为什么优化者会关心它是否大于或小于该值?所有必须检查的是它不等于什么. (12认同)
  • @KrisGruttemeyer:这是SQL Server的一个证据,证明你的说法是错的:http://dba.stackexchange.com/a/155670/1822这里是Postgres的另一个:执行计划清楚地表明`!=`得到优化器重写为"<>":http://rextester.com/CMEYC24808 (12认同)
  • @KrisGruttemeyer你错了.它们被解析为相同的标记.引擎不必做任何关于小于或大于评估<>的事情,因为它看到同样的标记,它从来没有机会.很明显,你的'证据'在某些时候是无效的. (4认同)
  • 我已经在几个存储过程中证明了这一点.这一切都取决于表中存在的索引.当您使用<>时,我相信引擎会扫描/搜索大于或小于的所有值.当我们使用!=时,它只适用于所有不等于你定义的值.我们在这里的几个程序中看到了30分钟到3分钟的性能提升.同样,每个人的环境/索引都不同,但我们尽量避免在索引列上使用<>运算符,因为它们不是SARGable.请参阅:http://www.sql-server-pro.com/sql-where-clause-optimization.html (3认同)
  • @KrisGruttemeyer Aaron所说的是,一旦改变了那个操作员,你很快就会体验到速度的提高; 然而,差异可能不是因为运营商本身,而是因为查询的变化导致了新的执行计划的产生.(例如,你有一个参数嗅探问题.)说<>不是SARGable是完全荒谬的.试试吧.将数据库中的所有!=更改为<>,并看到它执行相同的操作! (2认同)

Jon*_*eet 7

这是"不平等".查看您正在使用的数据库的运算符列表,并找到相应的部分(通常是"比较运算符").例如:


Woo*_*Moo 5

not equals运营商。用法:

select *  
from table
where foo <> 0 
Run Code Online (Sandbox Code Playgroud)