注册 登录
编程论坛 SQL Server论坛

如何更快的查询数据

jxawgyl 发布于 2010-09-30 08:43, 1409 次点击
如何更快的查询数据
现有四张表RecipeList,Outpatient ,Recipe,MedicineInspect ,查询每张表只要0.1秒时间,现建张视图表查询却要5分多,其如下:SELECT dbo.Outpatient.PatCode, dbo.Outpatient.PatName, dbo.Outpatient.Age,
      dbo.Outpatient.Sex, dbo.Outpatient.PatKindName, dbo.Outpatient.MedInsName,
      dbo.Outpatient.OffCode, dbo.MedicineInspect.MedName,
      dbo.MedicineInspect.MedSpec, dbo.MedicineInspect.StoreUnit,
      dbo.MedicineInspect.RoomUnit, dbo.MedicineInspect.ConvertUnit,
      dbo.MedicineInspect.MedSortCode, dbo.MedicineInspect.FinSortCode,
      dbo.MedicineInspect.PhaSortCode, dbo.MedicineInspect.MedModelCode,
      dbo.MedicineInspect.FivePen, dbo.MedicineInspect.Spell,
      dbo.MedicineInspect.Grade, dbo.MedicineInspect.MedSortName,
      dbo.MedicineInspect.FinSortName, dbo.MedicineInspect.PhaSortName,
      dbo.MedicineInspect.MedModelName, dbo.MedicineInspect.TendSortName,
      dbo.MedicineInspect.NongYi, dbo.MedicineInspect.ExecuteOffice,
      dbo.MedicineInspect.Sort, dbo.RecipeList.RecCode, dbo.RecipeList.Flow,
      dbo.RecipeList.MedCode, dbo.RecipeList.Number, dbo.RecipeList.RoomPrice,
      dbo.RecipeList.SendOpe, dbo.RecipeList.Sendtime, dbo.RecipeList.BackDrugOpe,
      dbo.RecipeList.BackDrugTime, dbo.RecipeList.BackChaOpe,
      dbo.RecipeList.ChargeOpe, dbo.RecipeList.CancelOpe, dbo.RecipeList.RoomCode,
      dbo.RecipeList.AddTime, dbo.RecipeList.DocCode, dbo.RecipeList.DocName,
      dbo.RecipeList.CancelSign, dbo.RecipeList.PreBackNum, '西药房' AS OffName,
      dbo.RecipeList.InsSign, dbo.RecipeList.AllMoney, dbo.RecipeList.SelfMoney,
      dbo.Operator.OpeName, dbo.Outpatient.OpeCode, dbo.Office.OffName AS OffName1,
      dbo.RecipeList.CheckSign, dbo.Recipe.YBRecCode
FROM dbo.RecipeList INNER JOIN
      dbo.Outpatient INNER JOIN
      dbo.Recipe ON dbo.Outpatient.PatCode = dbo.Recipe.PatCode ON
      dbo.RecipeList.RecCode = dbo.Recipe.RecCode INNER JOIN
      dbo.MedicineInspect ON
      dbo.RecipeList.MedCode = dbo.MedicineInspect.MedCode INNER JOIN
      dbo.Operator ON dbo.Outpatient.OpeCode = dbo.Operator.OpeCode INNER JOIN
      dbo.Office ON dbo.Outpatient.OffCode = dbo.Office.OffCode

请教各位应如何修改?
11 回复
#2
jxawgyl2010-09-30 09:21
为何用select *  from dbo.RecipeView    where addtime>'2010-01-01'时需要46秒,而select *  from dbo.RecipeView 却要5分多.而所有表中只有大于'2010-01-01'时间的数据.用不用where addtime>'2010-01-01'其查询结果应是相同的,查询时间却有长短,请教?
#3
筱晓绾2010-09-30 09:39
呵呵!查询的时候,加上筛选条件,能更快锁定查找范围。试想,从1000条数据中找一个结果容易,还是从10条数据中找一个结果容易呢?
#4
jxawgyl2010-09-30 09:58
原本表中只有大于'2010-01-01'时间的数据加,加不加应一样,加外问一下,如何修改视图表,使其查询时间缩短?
#5
筱晓绾2010-09-30 10:05
晕了
#6
gameohyes2010-09-30 22:54
建立索引试下
#7
cnfarer2010-10-01 07:37
一般来说,加了查询条件,系统会进行优化处理!所以可以提高速度。另外你的视图查询语句考虑一下,是否能进行变通,尽早使用条件,过滤掉不需要的数据。
#8
cnfarer2010-10-01 07:43
仔细看了一下,你竟然用了5个“inner join”这个导致速度下降是必然的!(Inner Join本来就快不了)
#9
qq88011032010-10-09 08:51
加了where 约束条件后 运行时查询的范围就会缩小。
#10
jxawgyl2010-10-12 09:22
仔细看了一下,你竟然用了5个“inner join”这个导致速度下降是必然的!(Inner Join本来就快不了)
请教8楼的楼主,应如何才能修改了?
#11
love_wjh13142010-10-12 15:34
使用索引是比较快的
不过要看你数据多少了,以现在电脑的速度,几千条数据的,也没必要建立索引
#12
cnfarer2010-10-12 15:42
1