我们有一组客户表,如客户,客户地址,客户沟通,客户专业(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
答案 0 :(得分:1)
您需要规划允许的查询;这是最小的必填字段以及支持它们的索引。
我无法想象只搜索城市或州会提供有用的结果。你的比赛太多了。
电子邮件ID非常有选择性,因此如果他们提供电子邮件ID,您可以使用一个查询。查询将从少量匹配的customer_communication记录驱动到父客户,然后再驱动到其他子记录。
First-Name加Last-Name将是可接受的选择性,因此如果他们提供这些但不是email_id(将使用第一个查询),请使用第二个查询 First-Name加上city加州可能是可接受的,因此第三个查询 姓氏加城市加州也可以接受,因此第四个查询
大多数索引可能会缓存在内存中。您可能会在每个查询中获得一些物理IO。如果你需要低于它,那么查看物化视图或表簇(即CUST_ID上的一个簇,所有表都存储为该簇的一部分)。