最近由于公司网站数据库有张表的数据量急剧增大,搜索速度随之下降,前几天甚至一直超时。
以前的程序员全部是写的like 模糊查询数据库,以前数据量很小,所以也一直没人关心这其中的隐患,前天老板指示要优化,而且不能改变现在网站的功能,很头疼,有点难度。
简单的说一下,主要搜索字段是 6个 地区是4个 行业类别是2个 安全问题就不在这里透露具体字段名称。
有其它三个字段是 固顶,置顶功能的排序 ,以前那哥们用order BY 这三个字段排序,那速度是可想而知的,这其中还有个时间数据类型的字段。 于是我拿这三个字段做了一个聚集索引 三个字段的顺序就是排序的顺序,其它六个字段 按顺序组成了一个 非聚集索引 去掉了order by,做完之后查询速度提了上来,基本都在2秒之内,但新的问题产生了,当 搜索全部数据式 比如 select top(20)*from XXX 排序正常,但只要在后面加上条件(条件字段是那六个字段中的) 排序就被打乱,而且每次查询 排序都不一样,困扰了很久。
最终的解决办法:把那六个字段分别做了一个非聚集索引,删除了刚开始做那个六个字段的组合非聚集索引,一切正常,速度没有影响。我不是数据库专员,对数据库理解不深,目前还没看出来多索引多插入,更改数据产生的影响,但还是不免得担心,我也说不上来为什么这么做会排序正常,难道非聚集索引会影响聚集索引的排序? 至今还不理解,如果有高手知道答案还希望能指点一下,不胜感激。