BIT字段排序速度太慢,有何高效的方法?

wfqn 北京皮影客科技有限公司 CTO/CIO/技术副总裁/总工程师  2008-03-15 03:18:06
对数据库中1万条数据进行搜索。

SELECT TOP 20 * FROM PeopleUser ORDER BY IsVIP DESC
执行需要8秒

SELECT * FROM PeopleUser ORDER BY IsVIP DESC
执行需要1秒

IsVIP字段是bit类型,值基本都是0。

请问,查询速度为何这么慢?
...全文
92 点赞 收藏 18
写回复
18 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wfqn 2008-03-17
我好像找到问题的原因了。应用top后 bit字段排序速度变慢,之前改成int/smallint类型时可能忘记加索引,这次加上索引速度非常快!

谢谢各位的热心帮助,结贴!
回复
wfqn 2008-03-17
zheninchangjiang,你好,我会重新建立一次数据表。
还想请教,IsVIP字段中全都是0是否也影响排序速度?是不是因为重复值太多了?你测试的时候也使用bit字段吗?
回复
wfqn 2008-03-17
set rowcount 20
速度确实快了,请问是什么原理?为什么TOP如此之慢?
回复
zheninchangjiang 2008-03-17
我在30万条数据中做了测试,并没有什么异常,建议你还是 dbcc checktable一下,并且建议重建该表的索引
set rowcount只对返回数据量大了以起作用
回复
zheninchangjiang 2008-03-17
set rowcount 20
不是set @@rowcount对不起
回复
flairsky 2008-03-17
有top还慢些阿……

用的sql哪个版本哦

再说bit用order by是不是有些多余???
回复
wfqn 2008-03-17
多谢各位的回答,但是问题依然没有解决。

首先要说明一点,bit字段在sqlserver中是无法做索引的,我尝试改变为int/smallint等类型并加入索引问题依旧。

而且一开始就是通过"IsVIP DESC, ID DESC"的方式排序,因为太慢才只保留了"IsVIP DESC"部分。

另外,我就是在查询分析器中执行的,对其他字段的排序速度非常快。



是不是IsVIP字段重复的值太多的缘故?
回复
viva369 2008-03-16
SELECT TOP 20 * FROM PeopleUser ORDER BY IsVIP DESC
执行需要8秒

SELECT * FROM PeopleUser ORDER BY IsVIP DESC
执行需要1秒
/**************************************/
第二条是在企业管理器中执行吧
回复
luoqun_ncs 2008-03-16
因为top 20那句先执行,那时候表还没有加载到内存.

瞎猜的(>"<),你反过来执行一下看看
回复
zheninchangjiang 2008-03-16
set @@rowcount=20
select * from PeopleUser ORDER BY IsVIP DESC
回复
sosopop 2008-03-16
太慢了吧.100万条也不该这样
回复
tongki 2008-03-16
对IsVIP做索引
回复
SELECT TOP 20 * FROM PeopleUser ORDER BY IsVIP DESC,id desc
你看看这个运行多少时间
回复
[Quote=引用楼主 wfqn 的帖子:]
对数据库中1万条数据进行搜索。

SELECT TOP 20 * FROM PeopleUser ORDER BY IsVIP DESC
执行需要8秒

SELECT * FROM PeopleUser ORDER BY IsVIP DESC
执行需要1秒

IsVIP字段是bit类型,值基本都是0。

请问,查询速度为何这么慢?
[/Quote]

一般情况应该是有top的快一点
回复
-狙击手- 2008-03-15
[Quote=引用楼主 wfqn 的帖子:]
对数据库中1万条数据进行搜索。

SELECT TOP 20 * FROM PeopleUser ORDER BY IsVIP DESC
执行需要8秒

SELECT * FROM PeopleUser ORDER BY IsVIP DESC
执行需要1秒

IsVIP字段是bit类型,值基本都是0。

请问,查询速度为何这么慢?
[/Quote]

按理top的要比没有TOP的快
是不是索引有问题?
---try:
DBCC CHECKTABLE ('table')

回复
iamme81 2008-03-15
[Quote=引用楼主 wfqn 的帖子:]
对数据库中1万条数据进行搜索。

SELECT TOP 20 * FROM PeopleUser ORDER BY IsVIP DESC
执行需要8秒

SELECT * FROM PeopleUser ORDER BY IsVIP DESC
执行需要1秒

IsVIP字段是bit类型,值基本都是0。

请问,查询速度为何这么慢?
[/Quote]

你看下执行过程,应该是先找到排序好的所有数据然后再显示前20个

对IsVIP做下索引的话也许会好些
回复
fffddd 2008-03-15
bit字段排序不应该这么慢的。
回复
dawugui 2008-03-15
[Quote=引用楼主 wfqn 的帖子:]
对数据库中1万条数据进行搜索。

SELECT TOP 20 * FROM PeopleUser ORDER BY IsVIP DESC
执行需要8秒

SELECT * FROM PeopleUser ORDER BY IsVIP DESC
执行需要1秒

IsVIP字段是bit类型,值基本都是0。

请问,查询速度为何这么慢?
[/Quote]
------------------------------------------------------
你对其他字段试试,情况一样的.

SELECT * FROM PeopleUser ORDER BY IsVIP DESC --对IsVIP排序,然后显示.

SELECT TOP 20 * FROM PeopleUser ORDER BY IsVIP DESC --对IsVIP排序,按从小到大找前20个,然后显示.明显多个步骤嘛.
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-03-15 03:18
社区公告
暂无公告