微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql – 在Oracle中的ORDER BY之后,0意味着什么

我想了解这个Oracle 9i查询结尾处的0是什么意思:
SELECT /*+ INDEX (a CODE_ZIP_CODE_IX) */ 
       a.city,a.state,LPAD(a.code,5,0)  ZipCode,b.County_Name     CoName,c.Description     RegDesc,d.Description     RegTypeDesc  
FROM TBL_CODE_ZIP a,TBL_CODE_COUNTY b,TBL_CODE_REGION c,TBL_CODE_REGION_TYPE d  
WHERE a.City = 'LONDONDERRY' 
    AND a.State = 'NH' 
    AND lpad(a.Code,0) = '03038' 
    AND a.Region_Type_Code = 1 
    AND b.County(+) = a.County_Code  
    AND b.STATE(+) = a.STATE 
    AND c.Code(+) = a.Region_Code  
    AND d.Code(+) = a.Region_Type_Code  
ORDER BY a.Code +0

有任何想法吗?

注意:我不认为它与升序或降序有关,因为我不能在a.Code和0之间添加asc或desc,我可以在0之后添加asc或desc

解决方法

在基于规则的优化器的日子里,0是一个诡计,这使得不可能在数字列上使用索引.同样,他们做了一个|| “用于字母数字列.

对于您的查询,在检查之后,我可以达到的唯一结论是,其创建者正在努力与表现.如果(这是我的假设)索引CODE_ZIP_CODE_IX是TBL_CODE_ZIP(代码)上的索引,那么查询将不会使用它,即使它被暗示使用它.创建者可能不知道通过使用LPAD(a.code,0)而不是a.code,索引不能使用. order by子句将其中间结果集(驻留在内存中)进行排序,并进行排序.不需要索引.但是,与0相似,他正在考虑禁用它.

所以,使用的技巧是无效的,现在只是误导,就像你已经发现的那样.

问候,
抢.

PS1:最好使用LPAD(TO_CHAR(a.code),’0′)或TO_CHAR(a.code,’fm00009′).那么很清楚你正在使用数据类型.

PS2:您的查询可能会受益于在LPAD(TO_CHAR(a.code),’0′)上使用基于函数的索引,或者您用来留下您的邮政编码的任何表达式.

原文地址:https://www.jb51.cc/mssql/75990.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐