我现在有四张表分别如下:
Buy(ID[PK],SmallClassID,shi,qu,Title,IsCheck)
SmallClass(ID[PK],SmallClassName)
shi(ID[PK],shiName)
qu(ID[PK],quName)进行关联的语句如下:
SELECT Buy.ID,Buy.Title,Buy.SmallClassID,shi.shiName,qu.quName,SmallClass.SmallClassName FROM (SELECT * FROM Buy WHERE SmallClassID=68 and shi=1 and IsCheck=1) AS Buy,shi,qu,SmallClass WHERE Buy.shi=shi.ID AND Buy.qu=qu.ID AND Buy.SmallClassID=SmallClass.IDBuy表里面有50000多条记录,其它三个表数据量非常小,现在执行起来有CPU为80-100之间,请教各位这条语句是否能再忧化一些。Buy这个表的涉及有INSERT,UPDATE,DELETE这些操作,有时候只与其中一个表关联,有时候也可能与两个表进行关联。我想建索引,试问该怎样建才好
1:在Buy表里面分别对shi,qu,SmallclassID建三个索引
2:还是建一个组合索引create index IX_Buys on buy(shi,qu,SmallClass)或者有更好的办法,请大指点一下,谢谢!如果我建一个组合索引的话,那么假如当Buy表只与SmallClass表进行关联的时候,这个组合索引能不能起到作用呢?还有一点,我上面写的关联语句如果换成INNER JOIN这个,效率上有区别吗?

解决方案 »

  1.   

    SELECT Buy.ID,Buy.Title,Buy.SmallClassID,shi.shiName,qu.quName,SmallClass.SmallClassName
    FROM Buy join shi on Buy.shi=shi.ID join qu on Buy.qu=qu.ID 
             join SmallClass on Buy.SmallClassID=SmallClass.ID 
    where buy.SmallClassID=68 and buy.shi=1 and buy.IsCheck=1感觉分别建索引好。
      

  2.   

    1、不要用子查询,直接连接 SQL codeSELECT Buy.ID,Buy.Title,Buy.SmallClassID,
    shi.shiName,qu.quName,SmallClass.SmallClassName 
    FROM Buy,Shi,Qu, SmallClass
    WHERE Buy.SmallClassID=68 and Buy.shi=1 and Buy.IsCheck=1
    and Buy.shi=shi.ID AND Buy.qu=qu.ID AND Buy.SmallClassID=SmallClass.ID 2、建一个组合索引create index IX_Buys on buy(SmallClass,shi,IsCheck),但是必须 注意这三个字段在Buy表的重复率,重复率低的排在前面   
     
      

  3.   

    建一个视图:
    treate view viewname as 
    select a.columnlists,b.columnlists,c.columnlists...
    from buy a join smallclass b on a.smallclassid=b.id
       ...
    order by b.smallclassid,b.id,a.ischeck,a.id查询时就直接
    select * from viewname where smallclassid=68 and shi=1 and ischeck=150000条数据真的是很少