您的位置:首页 > 数据库

sql语句根据特定条件改变排序及效率测试

2007-10-04 11:32 417 查看

sql语句根据特定条件改变排序及效率测试

两个解决方案:
SELECT * FROM T_Admin
ORDER BY CASE WHEN admin_name = 'loo' THEN 0 ELSE 1 END 
另外一种:
SELECT *, 0 AS tmp_o
FROM t_admin
WHERE admin_name = 'loo'
UNION
SELECT *, 1 AS tmp_o
FROM t_admin
WHERE admin_name <> 'loo'
ORDER BY tmp_o
现在来考虑一下两条语句的效率问题
建立表:
CREATE TABLE [TestTable] (
 [ID] [int] IDENTITY (1, 1) NOT NULL ,
 [FirstName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
 [LastName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
 [Country] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
 [Note] [nvarchar] (2000) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
 
插入数据:(2万条,用更多的数据测试会明显一些)
SET IDENTITY_INSERT TestTable ON
declare @i int
set @i=1
while @i<=20000
begin
    insert into TestTable([id], FirstName, LastName, Country,Note) values(@i, 'FirstName_XXX','LastName_XXX','Country_XXX','Note_XXX')
    set @i=@i+1
end
SET IDENTITY_INSERT TestTable OFF
 
简单的测试一下
如果不用top,所有数据都select出来的话两个的成本大概都是在50%左右,case语句会更快那么一点。
而同时输出几万记录的情况确实是太少了,加上top 10 结果就差非常的多。
union语句只需要0.38% 而 case语句竟然要99.26%。
测试的结果是:
如果小量数据推荐使用case语句,毕竟写起来是方便多了。
如果你的数据在1万以上,最好还是用union语句。
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  测试 sql insert null table go