关闭

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

962人阅读 评论(0) 收藏 举报

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语句。
 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2952458次
    • 积分:31003
    • 等级:
    • 排名:第164名
    • 原创:590篇
    • 转载:983篇
    • 译文:4篇
    • 评论:385条
    文章分类
    最新评论