zoukankan      html  css  js  c++  java
  • SQL查询效率,100w数据

    SQL优化—SQL查询效率,100w数据,查询只要1秒

    https://www.cnblogs.com/ShaYeBlog/p/3227244.html

    其他 测试

    -- setp 1.
    -- 建表
    create table t_userinfo
    (
    userid int identity(1,1) primary key nonclustered,
    nick varchar(50) not null default '',
    classid int not null default 0,
    writetime datetime not null default getdate()
    )
    go
    
    -- 建索引
    create clustered index ix_userinfo_classid on t_userinfo(classid)
    go
    
    -- step 2.
    
    declare @i int 
    declare @k int
    declare @nick varchar(10)
    set @i = 1
    while @i<1000000
    begin
    set @k = @i % 10
    set @nick = convert(varchar,@i)
    insert into t_userinfo(nick,classid,writetime) values(@nick,@k,getdate())
    set @i = @i + 1
    end
    -- 耗时 08:27 ,需要耐心等待
    
    -- step 3.
    select top 20 userid,nick,classid,writetime from t_userinfo 
    where userid not in
    (
    select top 900000 userid from t_userinfo order by userid asc
    )
    
    -- 耗时 8 秒 ,够长的
    -- step 4.
    select a.userid,b.nick,b.classid,b.writetime from
    (
        select top 20 a.userid from 
        (
        select top 900020 userid from t_userinfo order by userid asc
        ) a order by a.userid desc
    
    ) a 
    inner join 
    t_userinfo b 
    on 
    a.userid = b.userid 
    order by a.userid asc
    
    -- 耗时 1 秒,太快了吧,不可以思议
    
    -- step 5 where 查询
    select top 20 userid,nick,classid,writetime from t_userinfo where 1=1
    and classid = 1 and userid not in
    (
        select top 90000 userid from t_userinfo 
        where classid = 1
        order by userid asc
    )
    -- 耗时 2-- step 6 where 查询
    select a.userid,b.nick,b.classid,b.writetime from
    (
        select top 20 a.userid from 
        (
        select top 90000 userid from t_userinfo
        where classid = 1
        order by userid asc
        ) a order by a.userid desc
    ) a
     inner join 
     t_userinfo b 
    on a.userid = b.userid 
    order by a.userid asc
    
    -- 查询分析器显示不到 1 秒.
    
    --查询数据个数
    select count(*) from t_userinfo     --999999
    
    
    --测试 
    select top 20 userid,nick,classid,writetime from t_userinfo 
    where userid not in
    (
    select top 900000 userid from t_userinfo order by userid asc
    )
    -- setp 1.
    -- 建表
    create table t_userinfo
    (
    userid int identity(1,1) primary key nonclustered,
    nick varchar(50) not null default '',
    classid int not null default 0,
    writetime datetime not null default getdate()
    )
    go
    
    -- 建索引
    create clustered index ix_userinfo_classid on t_userinfo(classid)
    go
    
    -- step 2.
    
    declare @i int 
    declare @k int
    declare @nick varchar(10)
    set @i = 1
    while @i<1000000
    begin
    set @k = @i % 10
    set @nick = convert(varchar,@i)
    insert into t_userinfo(nick,classid,writetime) values(@nick,@k,getdate())
    set @i = @i + 1
    end
    -- 耗时 08:27 ,需要耐心等待
    
    -- step 3.
    select top 20 userid,nick,classid,writetime from t_userinfo 
    where userid not in
    (
    select top 900000 userid from t_userinfo order by userid asc
    )
    
    -- 耗时 8 秒 ,够长的
    -- step 4.
    select a.userid,b.nick,b.classid,b.writetime from
    (
        select top 20 a.userid from 
        (
        select top 900020 userid from t_userinfo order by userid asc
        ) a order by a.userid desc
    
    ) a 
    inner join 
    t_userinfo b 
    on 
    a.userid = b.userid 
    order by a.userid asc
    
    -- 耗时 1 秒,太快了吧,不可以思议
    
    -- step 5 where 查询
    select top 20 userid,nick,classid,writetime from t_userinfo where 1=1
    and classid = 1 and userid not in
    (
        select top 90000 userid from t_userinfo 
        where classid = 1
        order by userid asc
    )
    -- 耗时 2-- step 6 where 查询
    select a.userid,b.nick,b.classid,b.writetime from
    (
        select top 20 a.userid from 
        (
        select top 90000 userid from t_userinfo
        where classid = 1
        order by userid asc
        ) a order by a.userid desc
    ) a
     inner join 
     t_userinfo b 
    on a.userid = b.userid 
    order by a.userid asc
    
    -- 查询分析器显示不到 1 秒.
    
    --查询数据个数
    select count(*) from t_userinfo     --999999
    
    
    --测试 
    select top 20 userid,nick,classid,writetime from t_userinfo 
    where userid not in
    (
    select top 900000 userid from t_userinfo order by userid asc
    )
  • 相关阅读:
    在Ubuntu中通过update-alternatives切换软件版本
    SCons: 替代 make 和 makefile 及 javac 的极好用的c、c++、java 构建工具
    mongodb 的使用
    利用grub从ubuntu找回windows启动项
    How to Repair GRUB2 When Ubuntu Won’t Boot
    Redis vs Mongo vs mysql
    java script 的工具
    python 的弹框
    how to use greendao in android studio
    python yield的终极解释
  • 原文地址:https://www.cnblogs.com/enych/p/14845009.html
Copyright © 2011-2022 走看看