问:有可求值或就像它们被称作的阶段1谓词的例子,和不可求值或阶段2谓词的例子吗?他们在今天的SQL中还适合吗? 答:感谢提问。我有段时间没有听到这个词了。实际上,它可以追溯到最初,当IBM创造DB2的时候。据Wikipedia,如果数据库管理系统引擎可以利用一个索引来加速查询的执行(利用索引搜索,不覆盖索引),那么查询中的条件(或断言)可以被称呼为sargable(可求值)的。
这个词是来自Search ARGument的缩写。 所以是的,这个概念在今天仍是适合的。如果我们在订单表里搜索某一特定客户的订单,如果在customer_id列上存在一个索引,那么这个查询是可求值的。 一般说……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
问:有可求值或就像它们被称作的阶段1谓词的例子,和不可求值或阶段2谓词的例子吗?他们在今天的SQL中还适合吗?
答:感谢提问。我有段时间没有听到这个词了。实际上,它可以追溯到最初,当IBM创造DB2的时候。据Wikipedia,如果数据库管理系统引擎可以利用一个索引来加速查询的执行(利用索引搜索,不覆盖索引),那么查询中的条件(或断言)可以被称呼为sargable(可求值)的。这个词是来自Search ARGument的缩写。
所以是的,这个概念在今天仍是适合的。如果我们在订单表里搜索某一特定客户的订单,如果在customer_id列上存在一个索引,那么这个查询是可求值的。
一般说来,有两个规则:
1. 避免 NOT
2. 把列本身放置在操作符的左边
例如,下面的就不是可求值的:
select id , cust_id , amount from orders where month(date_ordered) = 05 |
当一个函数执行于一个列上,优化不能做索引搜索。把列本身放在左边:
select id , cust_id , amount from orders where date_ordered between ’2007-05-01’ and ’2007-05-31’ |
除了BETWEEN之外,其他的可求值操作符有=,>,<,>=,<=和like,like其后跟着一个——不在最前位置上——通配符。但是避免任何人产生误解,它不意味着你可以做下面的查询:
select id , cust_id , amount from orders where date_ordered like ’2007-05%’ |
没有人会这么做,虽然。。。是吧?
相关推荐
-
Azure数据湖分析从U-SQL中获得提升
大数据的发展已经让许多精通SQL的数据专业人员不知所措。微软的U-SQL编程语言试图让这些人回归数据查询游戏。
-
TT百科:SQL(结构化查询语言)
一般来说,SQL-on-Hadoop仍是一项新兴技术,但随着各个公司寻求获得拥有大数据应用程序编程SQL技能的开发和分析人员,它们正逐渐成为Hadoop部署的固定组件。
-
SQL和NoSQL数据库设计之争
企业收集了很多大规模增长的松散结构化数据,Hadoop,Spark以及其他新技术处理这些数据非常有助于改善商业智能分析效率。
-
如何通过格式良好的SQL提高效率和准确性
格式良好的SQL并不会比乱七八糟的SQL运行效果更好。数据库其实不怎么关心SQL语句中你把逗号放到了字段名的前面还是后面。