日期:2014-05-17  浏览次数:21406 次

asp+sql server,数据库优化问题,希望得到帮助
本人做了个网上书店,图书大概20万左右。但是现在数据库sql   server占用的CPU很严重。CPU占用在90%的持续时间比较长,我用sql事件探查器观察了一下,主要是下面这个sql语句
select   distinct   a.bookId,a.bookName,a.bookpic,a.ISBN,a.cbs,a.shichangjia,a.huiyuanjia,a.VIPjia,a.VIP2jia,a.bookdate,a.bookzz   from   books   a   With   (nolock)     inner   Join   BookType   b   With   (nolock)     on   a.bookid=b.PId   inner   Join   types   c   With   (nolock)     on   b.TypeId=c.Tid   where   c.TypeId   like   '0.1% '   order   by   a.bookdate   desc
这个sql语句表示查找类别在0.1(计算机图书)下的所有图书。books为图书信息表,booktype为图书分类对应表。因为一本图书可能会对应好几个分类。types为图书分类表。typeid为分类规则编码。下级分类通过0.1.XX扩充。在sql事件探查器中,这个sql语句中cpu字段和read字段的值分别为:3218和20107。另外我对这几个表分别建立了以下几个索引:除开主键外所有索引都为非聚合索引,因为对索引了解得不是很透彻,填充因子都是默认0%。
books表:1.bookdate(出版日期,因为需要根据出版日期进行排序)   2.bookname(图书名称,因为提供了根据图书名称检索)   3.cbs(出版社,需要根据出版社搜索)   4.isbn(需要根据图书isbn搜索)。4个索引都是单独建立的。
types表:typeid(分类编码,上面的sql语句中的like用到)
另外,我的sql语句中,根据图书名称,图书isbn,出版社等的查询条件都是模糊查询,即前后都有%,这样好像导致索引不起作用了,有没有什么办法可以解决?
希望有人解决下,分析下我的sql语句和索引是否合理,如果谁能帮我解决好,我愿意再加100分,如果需要有偿解决,我也愿意,可以细谈。谢谢各位了。

------解决方案--------------------
你应该用子查询先过滤TypeId
------解决方案--------------------
我能帮你解决,联系我吧,我需要调试环境
------解决方案--------------------
先过滤一下TypeId吧

------解决方案--------------------
增加分类表,这样做的好处就是可以让他有选择的对类别检索,可以降低时间来数据负担
类别做一个下拉菜单进行选择就行了 像类别里的全用数字代替,这样在检索的时候也能提高一些性能
还有就是LIKE能少用的话还是少用,太占资源
------解决方案--------------------
关注.