好久没更,今天发文辟个谣,尽量减少圈里的这种以讹传讹,以及不合理的代码规范要求。
即:如果使用了表的索引,则OPEN SQL中Where的字段顺序,要和索引中的字段顺序保持一致。
辟谣:错误!
这个说法的来源在于对PA教程的误解。打开BC402(我这里找不到英文版了),在OPEN SQL章节对于索引的部分中有如下的解释。
通过这两个图,大家可以看到PA教程里对OPEN SQL中Where从句的索引使用的建议和说明。
这里说的是,尽量从左侧指定,是指尽量用索引定义的左边的字段,而非在Where条件中先指定索引左侧字段。
如果不从左侧指定,会导致索引树匹配时出现模糊匹配,导致效率降低!
OPEN SQL具体执行的时候,是系统先把他转成基本SQL,然后交给数据库,数据库再去执行的。SQL在真正执行时,具体是什么样的执行逻辑,是由数据库层面决定的。OPEN SQL层面,如果不加Hints的话,是办不了这个事情的。
有兴趣的朋友,可以做个测试,测试一下where从句里的字段顺序调整前后,用ST05跟踪一下SQL的执行计划,看看有无差别。
——————
一切用测试来检验,拒绝盲目轻信,拒绝以讹传讹!