【发布时间】:2017-01-18 20:16:27
【问题描述】:
我在这里与客户愚蠢/固执的案件作斗争。我们有一个应用程序可以通过各种标准查找零售购物者。我们看到的最常见的变化是(部分)姓氏和(部分)邮政编码的某种组合。
当他们输入完整的邮政编码时,效果非常好。问题是他们有时会选择有效地输入邮政编码,例如'3%'。
有什么奇迹可以克服我们客户的愚蠢吗?
ETA:这个特殊的操作涉及两个表:客户和地址。我是一名参与支持此应用程序的 DBA,而不是在开发方面。我没有能力更改代码(尽管我可以就此提出建议),但我在改进索引方面还有一些余地。
Customers 有 2200 万行;地址有 2300 万个。
“愚蠢”可能是一个刺耳的词,但我不明白为什么您会尝试通过诸如“3%”之类的邮政编码来查找客户。我的意思是,输入他们的完整邮政编码需要多少努力?
【问题讨论】:
-
客户傻了,有什么影响?申请中断?表现不佳?还有什么?
-
根据你的信仰,你可以祈祷,也可以认为奇迹不存在。此外,到目前为止,您所展示的内容并不能证明您的客户是愚蠢的,这是无可置疑的。最好把它排除在外。现在:如果您有适当的索引,请确保统计数据是最新的。此外,邮政编码的分布可能会出现偏差;您可能需要使用直方图。
-
对了,再看看你的标题:如果你有一个关于邮政编码的索引,优化器可以在带有
like '3%'等条件的查询中使用它——只要通配符在结尾。它无法将它用于诸如like '%3'之类的条件 - 但您的情况不是。所以问题不在于索引;问题可能出在统计数据上,也可能是邮政编码分布极不均匀。 -
@BobC:显然 web 层有 20 秒的超时时间,有时当条件不够选择性时,应用程序会超时而不是返回任何内容。