有关索引的问题

jarodzhao 2009-04-07 04:07:59
当初创建表的时候没有使用注意索引,使用ID自增长列作为主键了,且没有创建其他索引
现在已经有超过30万条记录了,查询时非常慢...

想问一下:
1.现在如果修改表结构创建索引,查询速度会加快吗?
2.另外,我在测试时怎么建立索引和不建索引速度一样?!
while(@f<300000)
begin
-- insert into iMembers (iName,iPass,iFlag,lastDate) values ('jarod99','adfasdf',1,getdate())
exec('insert into iMembers2 (iName,iPass,iFlag,lastDate)
values (''jarod99' + @f + ''',''adfasdf'',1,getdate())')
set @f=@f+1
end

以上是测试时创建的30万条记录,建立有聚集索引和非聚集索引,查询是5秒
另一个表结构一样,没有任何索引和主键,查询也是5秒?!!
...全文
202 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdhdy 2009-04-07
  • 打赏
  • 举报
回复
楼主可以用这个试试。
select * from tb where charindex('999',iName)>0 
taoistong 2009-04-07
  • 打赏
  • 举报
回复
把前面那个%去掉,或者改成IN 之类的,反正 like '%999%' 是不行的!
small_well 2009-04-07
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 taoistong 的回复:]
like '%999%' 不讳使用索引!
like '999%' 会使用索引
[/Quote]
同意11楼.
btw,如果要用到类似的查询的话,如何换成符合SARG的?(like '%999%')
ws_hgo 2009-04-07
  • 打赏
  • 举报
回复
create index IX_ID on iMembers (ID)
taoistong 2009-04-07
  • 打赏
  • 举报
回复
like '%999%' 不讳使用索引!
like '999%' 会使用索引
small_well 2009-04-07
  • 打赏
  • 举报
回复
要想利用索引,要符合SARG标准.像楼主查询的
select * from iMembers where iName like '%999%'
这样的语句不符合SARG标准,即使建立了索引,也使用不了.
你可以试着看一下执行计划,就会发现是否利用到索引了!
把上面的语句改成
declare @iName varchar(50)
set @iName='某具体的值'
select * from iMembers where iName=@iName
Teng_s2000 2009-04-07
  • 打赏
  • 举报
回复
DBCC CLEANTABLE

DBCC DBREINDEX

建完索引,执行下这两个看看呢
jarodzhao 2009-04-07
  • 打赏
  • 举报
回复
回复5、6楼的,我在四楼发表的回复和你们基本在同一时间
可能回复没有被你们看到

表 iMembers 和表 iMembers2 是我测试索引的两个表,结构完全一样,但是一个有索引另一个没有索引
聚集索引字段,iName
查询语句 select * from iMembers where iName like '%999%'
这样索引算是用上了吧?!

在两个表查询结果都是11831条记录,所用的时间都是大约5秒,基本上没有差别~~~
不知道我的索引哪里出了问题?!
sdhdy 2009-04-07
  • 打赏
  • 举报
回复
模糊查找的话,索引用处不大。
ai_li7758521 2009-04-07
  • 打赏
  • 举报
回复
1.建立索引毋庸置疑会加快搜索
2.可能是你查询中没有使用索引
sdhdy 2009-04-07
  • 打赏
  • 举报
回复
[Quote=引用楼主 zht_ok 的帖子:]
当初创建表的时候没有使用注意索引,使用ID自增长列作为主键了,且没有创建其他索引
现在已经有超过30万条记录了,查询时非常慢...

想问一下:
1.现在如果修改表结构创建索引,查询速度会加快吗?
2.另外,我在测试时怎么建立索引和不建索引速度一样?!

SQL codewhile(@f<300000)
begin
-- insert into iMembers (iName,iPass,iFlag,lastDate) values ('jarod99','adfasdf',1,getdate())
exec('insert in…
[/Quote]

楼主查询的时候,用到了索引了吗?
如果只是:
select * from tb
那肯定用时是一样的,索引没用上。
除非这样,
select * from tb where 索引列=要查询的值
sdhdy 2009-04-07
  • 打赏
  • 举报
回复
[Quote=引用楼主 zht_ok 的帖子:]
当初创建表的时候没有使用注意索引,使用ID自增长列作为主键了,且没有创建其他索引
现在已经有超过30万条记录了,查询时非常慢...

想问一下:
1.现在如果修改表结构创建索引,查询速度会加快吗?
2.另外,我在测试时怎么建立索引和不建索引速度一样?!

SQL codewhile(@f<300000)
begin
-- insert into iMembers (iName,iPass,iFlag,lastDate) values ('jarod99','adfasdf',1,getdate())
exec('insert in…
[/Quote]

楼主查询的时候,用到了索引了吗?
如果只是:
select * from tb
那肯定用时是一样的,索引没用上。
除非这样,
select * from tb where 索引列=要查询的值
jarodzhao 2009-04-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 taoistong 的回复:]
重新组织一下索引吧!有语句和工具支持的

此外查询的条件字段为所创建索引的第一个字段才会使用索引!
[/Quote]

iMembers 表
iName 字段是聚集索引
lastDate,iId 字段为非聚集索引(顺序是这样的)

iMembers2 表
iId 为主键,没有其他索引

查询语句都是:select * from [] where iName like '%999%'
查询结果是 11831 条记录,为什么查询使用时间都是5秒钟?!!
我只是想测试一下索引的效率,难道方法不对吗?


taoistong 2009-04-07
  • 打赏
  • 举报
回复
重新组织一下索引吧!有语句和工具支持的


此外查询的条件字段为所创建索引的第一个字段才会使用索引!
taoistong 2009-04-07
  • 打赏
  • 举报
回复
重新组织一下索引吧!有语句和工具支持的


此外查询的条件字段为所创建索引的第一个字段才会使用索引!

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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