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

wfqn 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。

请问,查询速度为何这么慢?
...全文
136 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
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个,然后显示.明显多个步骤嘛.

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧