通过oracle DB搜索优化

时间:2011-08-05 04:01:15

标签: sql oracle oracle11g

我们有一组客户表,如客户,客户地址,客户沟通,客户专业(oracle 11g)。

前端将提供一些详细信息,例如'email-id','f-name','city','state'以在DB中搜索并返回匹配的客户详细信息。

所有表包含10个以上的coulmns,当找到匹配的emailid,f-name,city,state时,我们需要返回该客户的详细信息。

返回详细信息分布在所有4个表中,我们需要连接所有4个表以获取返回的详细信息。 (例如:我们需要重新调整客户,appt num,城市,州,电话号码,职业deatisl)

comm-metchod - 可以有电子邮件,电话,传真和
comm-method-values - 将包含其值

客户也可以拥有多个地址(具有不同的地址ID)和专业!

这里的问题是数据大小和连接需要更多时间。我们正在考虑制作观点,但当客户可以提供多个地址,电子邮件地址和专业时,视图的大小仍会令人难以置信。

寻找解决搜索复杂性的建议。

表就像 -

制表名:CUSTOMER
CUST_ID
F-名称
L-名称
县名
前缀
后缀
性别
blah1
blah2
blah3


制表名:CUST_ADDR
卡斯特-ID
卡斯特 - 地址-ID
街道
appt num

国家
国家
blah4
blah5
blah6


制表名:CUST_COMMUNICATION
卡斯特-ID
卡斯特 - 地址-ID
COMM-方法
COMM-方法值
blah7
blah8


制表名:CUST_PROFESSION
卡斯特-ID
专业代码
职业描述
评论-TXT
blah9
blah10


1 个答案:

答案 0 :(得分:1)

您需要规划允许的查询;这是最小的必填字段以及支持它们的索引。

我无法想象只搜索城市或州会提供有用的结果。你的比赛太多了。

电子邮件ID非常有选择性,因此如果他们提供电子邮件ID,您可以使用一个查询。查询将从少量匹配的customer_communication记录驱动到父客户,然后再驱动到其他子记录。

First-Name加Last-Name将是可接受的选择性,因此如果他们提供这些但不是email_id(将使用第一个查询),请使用第二个查询 First-Name加上city加州可能是可接受的,因此第三个查询 姓氏加城市加州也可以接受,因此第四个查询

大多数索引可能会缓存在内存中。您可能会在每个查询中获得一些物理IO。如果你需要低于它,那么查看物化视图或表簇(即CUST_ID上的一个簇,所有表都存储为该簇的一部分)。