首页 > 求解困扰我几天的关于SQL查询条件、排序、各种索引等一系列问题

求解困扰我几天的关于SQL查询条件、排序、各种索引等一系列问题

问题背景如下:针对以下这种查询sql

SELECT Id,title,Content,summary,date,hitnum FROM TbName WHERE 1=1 and CONTAINS(title,'"aaa"') and CONTAINS(Content,'"bbb"') ORDER BY date desc,hitnum desc

以上sql所涉及的title和Content字段我已经做了全文索引或简单索引,在此前提下,我是不是再建立一个如下的有关排序的非聚集索引就可以了?这个语句这样写可以吗?需要带ORDER BY 吗?

create nonclustered index NonClu_IX_TbName_fans_ci on Contenta (date desc,hitnum desc)

问题一:以上问题是否像我上面所说的这样就可以了呢???

如果是的话,那么,由此我也想到下面几个一直困惑我的问题:

问题二:一般滴,当我们建立索引时,是建立排序部分的索引(ORDER BY那一部分)重要,还是建立条件部分的索引(WHERE……那一部分)更加重要??

问题三:条件部分的索引和排序部分的索引是不是分别建立就可以了?还是最好将二者联合在一起、找出各种组合的可能并同时建立呢?那是不是意味着这是一个排列组合的问题了,有几张可能就建立几种索引吗?

问题四:查询条件字段数不一样的话(有时候是按两个条件查询、有时候是按5个条件查询),那么要对每一种组合的查询条件都建立非聚集索引吗?

问题五:当我们把作为主键的ID建立为聚集索引的基础上,我们还把各种查询和排序涉及到的其他字段都建立了全文索引,此时,是不是不管用什么字段组合构成查询的条件,都不再再对这些字段建立非聚集索引,而只需要就各种排序做索引就基本上完成了这个系统所有的索引相关的任务了呢?

问题六:存储过程又是为了什么呢?我的这个程序有一个特点就是不给用户开放任何添加数据、修改数据和删除数据的功能,只开放查询功能,这样的话,是不是就不需要存储过程了呢?

以上所有问题,大家请首先按照【问题六】所说的我的这个系统的特点来考虑和回答,这将有助于我解决我目前遇到的实际问题,但是,我还希望大家可以就一般网站的情况也解答一下,以便我了解这个问题的实质。

以上问题逐一环扣,请各位大哥逐一帮我解惑好吗?一个问题给我写一个答案好吗?或者您知道几个就回答几个也行,谢谢!


我的程序是asp的
查询速度不仅仅影响的是其本身,还影响着分页的速度
所以最近一直在为提高查询速度做各种尝试,由于知识是支离破碎的,所以虽然部分解决了速度问题,但是还是想搞明白正确的步骤,希望知其然更知其所以然,所以就有了这么多问题。
您说的索引不是越多越好,我表示严重同意啊
还有你说的如果只是查询的话,感觉没必要用到存储过程,我也觉得似乎是,因为数据都是我导入的,用户只有查询和排序和分页浏览的权限

最后你说的 感觉排序那部分完全可以通过程序排序,减轻数据库压力。可以举个例子吗?

我现在用的是asp里面的叶子分页类,效率还行,你还有更好的解决办法吗?


如果只是查询的话,感觉没必要用到存储过程,而且也不建议把业务放进存储过程(谁维护谁知道)。你这个sql的问题是查询慢吗?是的话可以用EXPLAIN看一下性能分析。还有,索引不是越多越好,越多可能越慢。看了一下你的sql,感觉排序那部分完全可以通过程序排序,减轻数据库压力。

【热门文章】
【热门文章】