都说索引能加快查询速度。我建了表,插入了300W的数据,无论怎么添加索引,查询速度就没变过!请亲手测试过索引能增加查询速度的大哥大姐,给小弟指点一下怎么样的表结构,怎么样的查询语句,才能体现出来有索引和没索引的查询区别???需要SQL语句。不要链接。需要SQL语句。不要空洞的话。谢谢!

解决方案 »

  1.   


    求大哥给出能清楚看出效率差别的SQL语句。谢谢
      

  2.   


    --建表
    create table tbTest
    (
    T_ID int identity(1,1) primary key not null,
    TName varchar(20) not null,
    TAge int
    )--插入数据
    create proc xx
    as
    declare @i int
    set @i=1
    while @i<3000000
    begin 
    insert into tbTest values('kk',@i)
    set @i=@i+1
    end
    go--执行查询
    select * from tbTest where TAge>500000 and TAge<2500000--创建索引
    create index aaaa on tbTest(Tage)--再次查询
    select * from tbTest where TAge>500000 and TAge<2500000
    两次查询速度一模一样!!
      

  3.   

    select * from tbTest (index =aaaa) where TAge>500000 and TAge<2500000
      

  4.   


    'index' 附近有语法错误。如果它要作为表提示的一部分,则必须有 WITH 关键字和圆括号。有关正确的语法,请参阅 SQL Server 联机丛书。
      

  5.   

    SELECT IDD=IDENTITY(INT,1,1),* INTO #T FROM SYSCOLUMNS
    CREATE TABLE TB(NUM INT)INSERT TB SELECT IDD FROM #TSET STATISTICS TIME  ON 
    SELECT * FROM TB ORDER BY NUM 
    SET STATISTICS TIME OFF 
    CREATE INDEX NUM_INDEX ON TB(NUM DESC)
    SET STATISTICS TIME  ON 
    SELECT * FROM TB ORDER BY NUM DESC
    SET STATISTICS TIME OFF 
    --DROP TABLE TB--DROP INDEX TB.NUM_INDEX用执行计划看看,
      

  6.   

    在有索引和无索引情况下测试这个sql:
    select * from tbTest where TAge=500000
      

  7.   


    不会用执行计划。请大哥就在我上面的例子上给指点一下吧。比如SQL语句应该怎么修改。谢谢!
      

  8.   

    select * from tbTest with(index =aaaa) where TAge>500000 and TAge<2500000
      

  9.   


    --修改
    update tbTest set TName ='LLL' where T_ID>1000000 and T_ID<2000000--查询
    select * from tbTest where TName='LLL'--创建索引
    create  index aaa on tbTest(Tname)--查询
    select * from tbTest where TName='LLL'
    两次查询时间仍然相同!
      

  10.   


    我测试了三遍with(index =aaaa)  有这个的时间,别没有的时间还要慢两秒!
      

  11.   


    那请大哥给个使用索引的SQL吧
      

  12.   

    你用的查询条件是TAge,,问一下,你的索引里用的是哪个字段?
    做了索引,你这么大的量,可能会影响更新和插入的速度!
      

  13.   


    请看6L .--创建索引
    create index aaaa on tbTest(Tage)我就是要影响查询的速度,然后来看一下用不用索引的效率差别。结果没差别。
      

  14.   

    索引不是万能的.如果你都用 SELECT * FROM Table WHERE 后跟一个很大的范围.是不会用到索引的(使用全表扫描). 具体情况具体分析的.
      

  15.   

    use tempdb
    go
    create table tbTest
    (
    T_ID int identity(1,1) primary key not null,
    TName varchar(20) not null,
    TAge int
    )--插入数据declare @i int
    set @i=1
    while @i<3000000
    begin 
    insert into tbTest values('kk',@i)
    set @i=@i+1
    end
    goset statistics io on
    set statistics time on
    --执行查询
    select * from tbTest where TAge=500000
    /*
    (1 row(s) affected)
    表 'tbTest'。扫描计数 9,逻辑读取 8678 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 SQL Server 执行时间:
       CPU 时间 = 735 毫秒,占用时间 = 100 毫秒。
    */--创建索引
    create index aaaa on tbTest(Tage)
    --再次查询
    select * from tbTest where TAge=500000
    /*
    (1 row(s) affected)
    表 'tbTest'。扫描计数 1,逻辑读取 6 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 SQL Server 执行时间:
       CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
    */
    上面的示例,已经说明利用了索引,由读 8678 个page减为6个page.不是所有的t-sql都会利用索引,比如你用select * from tbTest where TAge>1
    用索引比不用还慢.
      

  16.   

    表太极端如果查询的数据超过表的一定比例时即便是有索引,也会走 table scan,即不会使用索引实际业务中,什么情况会一下查询几十万行的记录?大多数是把数据从 OLTP 中 ETL/Load 到 OLAP/数据仓库 中的情况而这时的情况,数据 LOAD 几十秒/分钟 都是正常现象
    仅供参考.
      

  17.   

    MS SQL SERVER是自动的,你的努力如加索引有可能没有什么作用,它不象Oralce自定义的效果很好
      

  18.   

    聚集索引:确定表中数据的物理位置,对于那些经常要搜索范围值的列特别有效,不适于频繁更改的列;
    非聚集索引:适用于精确查找。create index aaaa on tbTest(Tage)
    改成Create Clustered Index aaaa on tbTest(Tage)试试。