首页 新闻 会员 周边 捐助

数据库索引优化问题请教

0
悬赏园豆:100 [待解决问题]

各位大神好,想请教一个数据库优化的问题:

表结构如下,

目前遇到的问题是这样的,根据巡店表来统计口味信息,本来很简单的一个sql如下:

SELECT DISTINCT f.NAME,v.ID FROM dbo.VISITS AS v
INNER JOIN dbo.CPR_FORM_DATAS AS cfd ON cfd.VISITID=v.ID
INNER JOIN dbo.FORMS f ON cfd.FORM_ID=f.ID
WHERE v.ID=2014052209530840802272

巡店表ID有聚集索引,巡店详情表VISITID也有非聚集索引,但是就是非常慢(一条数据也需要4s),(问题1,想问下,这是否跟VISITID字段的数据类型有关呢?),后来我就修改成如下:

SELECT DISTINCT f.NAME,v.ID FROM dbo.VISITS AS v INNER JOIN
dbo.CPR_Visit_PromotionTable AS cvp ON cvp.VisitId=v.ID
INNER JOIN dbo.CPR_FORM_DATA_VISIT_P_T_ID AS cfdvpt ON cfdvpt.CPR_Visit_PromotionTable_ID=cvp.ID
INNER JOIN dbo.CPR_FORM_DATAS AS cfd ON cfd.ID=cfdvpt.CPR_FORM_DATA_ID
INNER JOIN dbo.FORMS f ON cfd.FORM_ID=f.ID
WHERE v.ID IN(SELECT ID FROM dbo.VISITS WHERE USER_ID='2538')

增加了两个表查找,是通过巡店表ID查找的,速度大幅度提升,数据少一秒内就能查出来,但是如果据
量大量,时间仍然会呈现指数型增长,
问题2,想问下,巡店详情表的ID(目前是唯一非聚集索引),是否有必要修改成聚集索引呢,虽然是唯一的,但是不是有序的。

麻烦各路大神给看下,万分感谢!

抬头45度的主页 抬头45度 | 初学一级 | 园豆:21
提问于:2015-01-23 17:17
< >
分享
所有回答(3)
0

你s试试在FORMS表中 新建一个 ID并包含Name的非聚集索引

Yu | 园豆:12990 (专家六级) | 2015-01-24 10:43
0

问题一:

是,建议你转下数据格式,一般来说数字比较的速度较快

或者你试下:

SELECT DISTINCT NAME FROM dbo.FORMS WHERE ID=2014052209530840802272

CPR_FORM_DATAS 里面的数据你根本就没用到,如果用到且每次只取一条数据的话建议用子查询

问题一:

没必要,建立非聚集索引已经对该列进行了排序,只不过数据并没有按该列排序

大志若愚 | 园豆:2138 (老鸟四级) | 2015-01-26 10:55
0

试试视图来连接

Cat Qi | 园豆:761 (小虾三级) | 2015-01-26 17:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册