sql2005索引问题

lyf_qin1010 2010-10-29 03:41:03
同样的数据库脚本,在不同的机器上运行一样的sql语句,执行计划不一样
如 表A(A按时间来分区)
select * from a where id =1 and sDate >='2010-10-28 00:00:01'
and sDate < ='2010-10-29 23:59:59'
order by id

索引为 create NONCLUSTERED index idx_IDtime on CarGPS_Info(ID,sDate ) on
tracksDateRangePScheme(sDate )


不同机器上执行结果
一台使用索引,数据1秒左右就查出来
另一台直接扫描全表,要40多秒才查询出数据

怎么会有这样的结果?
...全文
179 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawugui 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lyf_qin1010 的回复:]
cpu,内存占用都非常低,这点好早就考虑过了,唉,真不明白,换个环境差别这么大,原来软件也会水土不服啊!
[/Quote]
那就试试重建索引。
lyf_qin1010 2010-10-29
  • 打赏
  • 举报
回复
cpu,内存占用都非常低,这点好早就考虑过了,唉,真不明白,换个环境差别这么大,原来软件也会水土不服啊!
dawugui 2010-10-29
  • 打赏
  • 举报
回复
3两机器运行的软件不一样?

这个?如果某些软件或过程造成该机器资源耗尽(CPU,内存等),则会出现意想不到的事情。祝你好运。
lyf_qin1010 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dawugui 的回复:]


引用 1 楼 dawugui 的回复:
1。先查询两机索引是否一样?
2。检查索引是否存在碎片,是否需要修复或重建?
3。检查两机上是否存在有不同的其他程序或过程在运行?


如果还不对?那就只能说明某机sql server出问题了,那就麻烦了,得重装了。

SQL code
……
[/Quote]

1索引存在
2正在尝试
3两机器运行的软件不一样

数据库是企业版的
dawugui 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lyf_qin1010 的回复:]
我确定是有索引的
[/Quote]

按照我一楼说的:

[Quote=引用 1 楼 dawugui 的回复:]
1。先查询两机索引是否一样?
2。检查索引是否存在碎片,是否需要修复或重建?
3。检查两机上是否存在有不同的其他程序或过程在运行?
[/Quote]

如果还不对?那就只能说明某机sql server出问题了,那就麻烦了,得重装了。


SQL2005的安装问题汇总
SQL2005 分五个版本,如下所列,
  1.Enterprise(企业版),
2.Development(开发版),
  3.Workgroup(工作群版),
  4.Standard(标准版),
  5.Express(简易版),
  这几个版本,我们究竟应该使用哪一版呢﹖
  这是许多初学SQL2005的人最常问的问题。
  我简单的比较一下 Enterprise, Development 和 Express 等三个版本:以功能言,Enterprise 版和 Development 版的功能一模一样。
两者的差别,除了授权不同外,最主要的差别是:
  Enterprise版的数据库引擎只能安装在Win2003Server(或其他Server)。
  如果你想安装在WindowsXP Pro系统上,你应该安装SQL2005Development版(开发版)。
  注:有人问,什么是「数据库引擎」。嗯,数据库引擎是SQL2005的核心,是最主要的数据库管理功能模块。没有它,就不是数据库管理系统了。
  很多人下载 SQL2005Express版,因为它是免费的,可以直接从微软网站上下载。但是,它除了支持的内存比较少外,最主要的是
  它缺少相当于SQL2000下的「企业管理器」和「查询分析器」。
  注:SQL2000下的「企业管理器」和「查询分析器」在SQL2005已合为一,称为 Management Studio。
  因此,如果你是初学者,如果你只是想要在家里学习学习,如果你的环境是 WindowsXP Pro,那么,你应该选择的是 SQL2005Development(开发版),
而不是SQL2005Enterprise(企业版)或SQL2005Express(简易版)。
  SQL2005 入门者,你选择正确了吗﹖
我就是从“ Microsoft.SQL.Server.2005.Enterprise.Edition.DVD-ZWTiSO,请大家下载加速 " 上下载的,说明文件里显示是"标准版和企业版",
但是我在安装的时候显示不能满足最低的硬件要求(我的机器的配置:server2003企业版 AMD2800+,512M DDR400内存,系统盘有16G的空闲空间),
在组件选择框里,只能看见native client和安装sample 数据库,这究竟是什么原因?2005的硬件要求真的那么高吗? 或者说这到底影响安装和使用吗?
在我不改变硬件的情况下怎么解决上面的问题啊应该是满足硬件要求的,看安装时的提示是什么吧2005数据库安装心得

我的环境是xp sp2 EN,SQL 2005 Dev版,内存512MB。
  首先,我的系统已经使用半年多了,装有VS2003,以前还装过SQL2000,netFramework2.0beta,还有好几个beta版的SQL 2005,可谓十分“肮脏”了,呵呵。
最早的时候我下过一个2005EE版,怎么也安装不上,后来发现原来是EE不支持xp =_= ,然后就下了DE版的。
  刚开始安装的时候吓了我一跳,丫的居然要占用我C盘1300多MB!!忍了。(我是把SQL装在F盘的,但是居然还需要C盘1300多MB)。但是却安装失败,看了一下安装日志,
天书,不明白。只知道是native client几个组件安装不成功。重复多次问题依旧。
  研究安装包之后,发现里面有两个主要的文件夹,是server和tools。顾名思义,server里面肯定是服务的安装文件了,而tools里面应该是那些工具组件的安装文件。
进入tools里面,果然有个setup,运行之,竟然安装成功了,而且只占了我C盘200多MB,好兴奋(没有选择BI,就是那个商业智能组件,太大了)。
然后重启电脑(不是必须的,只是一次setup之后系统慢的不行了),进入server目录下面,当然也有一个setup啦,运行之,呵呵,果然是安装服务用的啊。
这次也顺利安装成功了。再去看C盘,哈哈,一共只用了我300多MB,竟然节省了1GB。
  当然了,其实一起安装的话,也不一定会用完1300MB的空间的,因为安装结束之后还会自动删除一些垃圾文件的。但是不管怎么说,至少让我能正常安装了。
我的C盘只有1400的空闲空间了,不知道起初安装失败是不是跟这有关系。
  至此,SQL 2005已经成功的在我电脑上安家了。安装的时候,如果你的电脑和我的一样是内存不足(小于1GB),性能也不足够大(我的CPU是centrio 1.3G,呵呵,
装在本本上了),建议在安装的时候把系统开始是需要运行的服务全都不选择,用的时候再手动运行好了。
  运行Management Studio,嗯,速度还挺快的呢。连接服务器,竟然没有localhost,呵呵,打开server configuration manager,把右边那个MSSQLSERVER运行起来。
ok,这次没有问题了。
  使用一切正常,就是发现从sql2000里面备份出来的数据库在2005下只能通过sql语句修改数据,而不能所见及所得的修改,不知道怎么回事。

  btw:后来又把商业智能组件装上了,只用了C盘150MB,开心。SQL2005安装过程提示com+目录问题警告处理
安装sql2005一直失败,以为提示的问题是这个com+目录问题警告所致,找了很久找到这个问题的解决方案
sql2005_STD_X86在XPSP2下安装失败的一点经验
软环境是XPSP2,安装SQL2005_STD_X86版。
故障提示:
1、如果 SQL Server 安装程序失败,安装程序将回滚所安装的系统,但可能不会删除所有 .manifest 文件。解决方法是重命名这些文件,然后重新运行安装程序。
有关详细信息,请参阅“如何处理 SQL Server 安装过程中的 COM+ 检查失败问题”。如果未运行 Microsoft 分布式事务处理协调器 (MS DTC),或者,
在使用 Microsoft 群集服务器的情况下,如果 MS DTC 不是群集资源,则可能会发生 COM+ 错误。COM+ 依赖于 MS DTC,而 Integration Services 中的消息队列
任务依赖于 COM +。如果出现 COM+ 错误,则只有将 COM+ 系统正确配置后,Integration Services 中的消息队列任务才可用。
2、对性能监视器计数器注册表值执行系统配置检查失败。有关详细信息,请参阅自述文件或 SQL Server 联机丛书中的“如何在 SQL Server 2005 中为安装程序增加
计数器注册表项值”。
安装中止。
查找联机丛书,有如下提示:
1、Microsoft SQL Server 2005 安装程序检查 COM+ 是否已正确配置。如果发现配置错误,安装程序仍将继续,但是在系统配置检查 (SCC) 报告中显示以下警告:
“如果 SQL Server 安装程序失败,安装程序将回滚所进行的安装,但可能不会删除所有的 .manifest 文件。解决方法是重命名这些文件,然后重新运行安装程序。”
如果未运行 Microsoft 分布式事务处理协调器 (MS DTC),或者,在使用 Microsoft 群集服务器的情况下,如果 MS DTC 不是群集资源,则可能会发生 COM+ 错误。
COM+ 依赖于 MS DTC,而 Integration Services 中的消息队列任务依赖于 COM +。如果出现 COM+ 错误,则只有将 COM+ 系统正确配置后,Integration Services
中的消息队列任务才可用。
若要使用消息队列(亦称 MSMQ),请确保 MS DTC 正在运行并且已正确配置。如果 SQL Server 安装在群集上,则 MS DTC 必须是群集资源。
按照下列过程重新安装 COM+。
安装组件服务管理单元
在 Windows 桌面上,单击“开始”,然后单击“运行”。
在“打开”框中,键入 MMC,然后单击“确定”。
在“控制台”窗口中,单击菜单栏上的“文件”,然后单击“添加/删除管理单元”。
在“添加/删除管理单元”窗口,单击“添加”。
在“添加独立管理单元”窗口,从管理单元列表中选择“组件服务”,然后单击“添加”。
单击“关闭”以关闭“添加独立管理单元”窗口,然后单击“确定”以关闭“添加/删除管理单元”窗口。
在“控制台根节点\组件服务”窗口,展开“组件服务”树。这就是当 COM+ 出现问题时,错误消息可能发生的地方。
再次运行 SQL Server 2005 安装程序。如果收到错误消息,请重新安装 COM+。
重新安装 COM+
从控制面板的“添加或删除程序”中,单击“添加/删除 Windows 组件”。
在“Windows 组件向导”中,不对选择做任何更改,单击“下一步”。
一直单击以完成向导,然后再次运行 SQL Server 2005 安装程序。
2、在 SQL Server 安装开始前,Microsoft SQL Server 安装程序中的安装配置检查器 (SCC) 会验证计数器注册表项的值。如果 SCC 无法验证现有的注册表项,
或 SCC 无法运行 lodctr.exe 系统程序,则 SCC 检查会失败,致使安装受阻。
错误编辑注册表会严重损坏您的系统。更改注册表项之前,建议您备份计算机中的所有重要数据。
手动设置计数器注册表项的增量
在 Microsoft Windows 2003 或 Windows XP 桌面上,依次单击“开始”、“运行”,然后在“打开”中键入 regedit.exe,再单击“确定”。在 Windows 2000 中,
使用 regedt32.exe 启动注册表编辑器。
定位到以下注册表项:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib]
"Last Counter"=dword:00000ed4 (5276)
"LastHelp"=dword:00000ed5 (5277)
上一步的“Last Counter”值 (5276) 必须与以下注册表项中“Perflib\009”的“Counter”项的最大值匹配,并且上一步的“Last Help”值 (5277) 必须与以下
注册表项中“Perflib\009”的“Help”项的最大值匹配。
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\009]
注意 009 是英文中的一个示例。“Last Counter”和“Last Help”值是由 Windows 动态分配的;这两个值会因计算机的不同而不同。
如有必要,可修改“\Perflib”项中的“Last Counter”和“Last Help”值的值:在右侧窗格中,右键单击“Last Counter”或“Last Help”,单击“修改”,
再单击“Base = "Decimal"”,在“值数据”中设置值,再单击“确定”。如有必要,对另一个项重复以上过程,然后关闭注册表编辑器。
再次运行 SQL Server 安装程序。
解决过程:
COM+检查失败不用说肯定是组件消息队列下的组件没安装或服务没启动。本机没有安装过消息队列,找出系统盘安装消息队列组件,在组件安装中提示MSDTC服务没有启动,
在这步晕了长很时间,MSTDC在服务中怎么也找不到,后来想会不会是DTC(脑子有点笨,其实从MSMQ这名称上就应该想到),一看果然有Distributed Transaction
Coordinator(DTC),但是这个服务启动不了,后来查找相关资料:MSDTC( Distributed Transaction Coordinator )服务必须在 NT AUTHORITY\NetworkService 帐户下
运行;即使是 NT AUTHORITY\Network Service(注意,Network和Service中间有空格)也不行(至于这两个帐户的区别,在网上也没有找到,还望大家不吝赐教 )。如果
登录帐户被更改,MSDTC服务会继续运行,但是在执行的时候可能会出错。而且,在事件日志的“应用程序”里面可以发现如下的出错信息:
正在运行 MS DTC 服务的帐户无效。 如果使用 Microsoft Management Console (MMC) 中的“服务”管理单元更改了服务帐户信息,就会发生这种情况。 MS DTC 服务将
继续启动。请确认使用“组件服务管理器”更新了 MS DTC 服务帐户信息。
要更改成正确的登录帐户,我们可以:
在服务中找到Distributed Transaction Coordinator服务,选择“属性”;
在“登录”选项卡中,选择“此帐户”,帐户名填写“NT AUTHORITY\NetworkService”,密码为空;
在点击“确定”后重新启动服务。
或者,在命令行下运行 msdtc -uninstall ,卸载 msdtc 服务;
再运行 msdtc -install ,安装 msdtc 服务。
MSTDC服务成功启动,组件服务中“COM+应用程序”可以访问,上面第2项故障没去解决,先试着安装看看有没有错误,令人惊喜,安装检查一切顺利,第2项错误同时
也解决了。
当然,解决问题的过程同样的系统环境也不尽相同,在这里谈一下我安装的小挫折,希望可以给碰到相同问题的朋友有些提示作用。sql2005安装过程owc11错误处理

最近安装了很久的sql2005,过程中间出现很多问题,之前的com+目录警告是一个部分,处理过之后还是发现一直无法安装成功,(为此我安装了10+)次才解决问题
在安装过程中发现以下错误
Product : OWC11
Error : 错误 1706。安装程序找不到需要的文件。请检查网络连接或 CD-ROM 驱动器状态。对于这个问题的其他可能的解决方案,
请参阅 C:\Program Files\Microsoft Office\OFFICE11\2052\SETUP.CHM。

发现自己的ocw11没有安装导致服务器的有关组件全部无法安装,每次都是安装失败,
在microsoft ocw11下载地址
找到microsoft的ocw11,选择简体中文后下载安装后发现还是出现相同的问题,
把下载下来的ocw11解压缩后观察该ocw11.xml,发现sql 2005的server的setup目录下面有相同文件名文件,再次逐次对比发现该ocw11里面的文件包里面的文件对应
的setup里面全部都有,不过发现2个chm的后缀不同,一个是10XX,一个是2052,呵呵,原来是版本不同
直接运行setup目录下面的setup,选择修复或全新安装全部提示错误的文件源,再次观察,把setup目录下面对应的的ocw11文件全部拷贝到硬盘上面,再次运行修复成功,
之后安装sql2005终于一路成功,困扰了我2天的问题终于解决,特此把本文于全体学习sql2005的朋友分享,希望大家少走弯路.一起交流sql的有关功能
lyf_qin1010 2010-10-29
  • 打赏
  • 举报
回复
我确定是有索引的
lyf_qin1010 2010-10-29
  • 打赏
  • 举报
回复
重建索引很多次了,都是一样的结果,也更新过统计信息。
如果索引不起作用,查询大于一天的数据就非常慢,最后到达客户端时就超时了。
--小F-- 2010-10-29
  • 打赏
  • 举报
回复
不同机器上执行结果
一台使用索引,数据1秒左右就查出来
另一台直接扫描全表,要40多秒才查询出数据


索引的好处就在这里体现了啊 另一台是不是没索引?
dawugui 2010-10-29
  • 打赏
  • 举报
回复
          SQL Server 2005 联机丛书  

DBCC INDEXDEFRAG (Transact-SQL) 发送反馈
请参阅
全部折叠全部展开 语言筛选器: 全部语言筛选器: 多语言语言筛选器: Visual Basic语言筛选器: C#语言筛选器: C++语言筛选器: J#语言筛选器: JScript
DBCC (Transact-SQL) >
Visual Basic(Declaration)
C#
C++
J#
JScript

指定表或视图的索引碎片整理。

重要事项:
后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并应着手修改当前还在使用该功能的应用程序。 请改用 ALTER INDEX。



Transact-SQL 语法约定

语法

DBCC INDEXDEFRAG
(
{ 'database_name' | database_id | 0 }
, { 'table_name' | table_id | 'view_name' | view_id }
, { 'index_name' | index_id }
, { partition_number | 0 }
)
[ WITH NO_INFOMSGS ]


备注
DBCC INDEXDEFRAG 对索引的叶级进行碎片整理,以便页的物理顺序与叶节点从左到右的逻辑顺序相匹配,因此可提高索引扫描性能。

注意:
运行 DBCC INDEXDEFRAG 时,索引碎片整理是串行进行的。这表示对单个索引的操作是使用单个线程执行的。没有发生并行操作。同样,在同一个 DBCC INDEXDEFRAG 语句中对多个索引的操作是一次对一个索引执行的。



DBCC INDEXDEFRAG 还压缩索引页,并考虑创建索引时指定的填充因子。任何因这种压缩而创建的空页将被删除。有关详细信息,请参阅填充因子。

如果索引跨越多个文件,则 DBCC INDEXDEFRAG 一次对一个文件进行碎片整理。页不在文件之间迁移。

DBCC INDEXDEFRAG 每隔五分钟就报告完成的估计百分比。可在进程中的任一点停止 DBCC INDEXDEFRAG,任何已完成的工作都将保留。

与 DBCC DBREINDEX(或通常的索引生成操作)不同,DBCC INDEXDEFRAG 是联机操作。它不长期保持锁。因此,DBCC INDEXDEFRAG 不会阻塞运行查询或更新。因为碎片整理所需的时间与碎片整理的级别相关,若索引的碎片相对较少,则该索引的碎片整理速度比生成一个新索引要快。对碎片太多的索引进行整理可能要比重建索引花更多的时间。

始终对碎片整理进行完整的日志记录,与数据库恢复模式设置无关。有关详细信息,请参阅 ALTER DATABASE (Transact-SQL)。对碎片太多的索引进行整理所生成的日志可能比完全记录的索引创建多。但是,碎片整理是作为一系列短事务执行的,因此,如果经常进行日志备份或将恢复模式设置为 SIMPLE,则不需要大日志。

DBCC INDEXDEFRAG 打乱了已有的索引叶级页。因此,如果索引与磁盘上的其他索引交叉,则针对该索引运行 DBCC INDEXDEFRAG 不使索引中的所有叶级页连续。若要改善页的聚集,请重建索引。

DBCC INDEXDEFRAG 不能用于对禁用的索引或页锁定设置为 OFF 的索引进行碎片整理。不支持对系统表使用 DBCC INDEXDEFRAG。

参数
'database_name' | database_id | 0

对其索引进行碎片整理的数据库。如果指定 0,则使用当前数据库。数据库名称必须符合有关标识符的规则。

'table_name' | table_id | 'view_name' | view_id

对其索引进行碎片整理的表或视图。表和视图的名称必须符合有关标识符的规则。

'index_name' | index_id

要进行碎片整理的索引的 ID 的名称。如果未指定,该语句就对指定表或视图的所有索引进行碎片整理。索引名称必须符合有关标识符的规则。

partition_number | 0

要进行碎片整理的索引的分区号。如果未指定或指定 0,该语句将对指定索引的所有分区进行碎片整理。

WITH NO_INFOMSGS

取消严重级别从 0 到 10 的所有信息性消息。

结果集
如果在语句中指定索引(除非指定了 WITH NO_INFOMSGS),DBCC INDEXDEFRAG 返回以下结果集(值可能不同):

复制代码
Pages Scanned Pages Moved Pages Removed
------------- ----------- -------------
359 346 8

(1 row(s) affected)

DBCC execution completed. If DBCC printed error messages, contact your system administrator.


权限
调用方必须是表所有者,或是 sysadmin 固定服务器角色、db_owner 固定数据库角色或 db_ddladmin 固定数据库角色的成员。

示例
以下示例对 AdventureWorks 数据库的 Production.Product 表中的 PK_Product_ProductID 索引的所有分区进行碎片整理。

复制代码
DBCC INDEXDEFRAG (AdventureWorks, 'Production.Product', PK_Product_ProductID)
GO


请参阅
参考
DBCC (Transact-SQL)
sys.dm_db_index_physical_stats
CREATE TABLE (Transact-SQL)
ALTER TABLE (Transact-SQL)
ALTER INDEX (Transact-SQL)

其他资源
表和索引体系结构


帮助和信息
获取 SQL Server 2005 帮助文档反馈
Microsoft 非常重视您的反馈。若要对该主题分级并将对该主题的反馈发送到文档编写组,请单击一个分级,再单击“发送反馈”。要想获得有关支持方面的问题的协助,请参阅包含在该产品中的技术支持信息。
不好 1
2
3
4
5
出色
若要将反馈通过电子邮件发送给 Microsoft,请单击此处:
(C) 2005 Microsoft Corporation。保留所有权利。
dawugui 2010-10-29
  • 打赏
  • 举报
回复
1。先查询两机索引是否一样?
2。检查索引是否存在碎片,是否需要修复或重建?
3。检查两机上是否存在有不同的其他程序或过程在运行?

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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