【发布时间】:2013-07-23 07:53:17
【问题描述】:
【问题讨论】:
-
如果它们是等效的,那么它们应该具有相同的性能。换句话说,唯一的区别在于编译阶段。
标签: sql performance sqlite coalesce ifnull
【问题讨论】:
标签: sql performance sqlite coalesce ifnull
我已经通过一些实验证实了 Gordon Linoff 的说法。设置:Windows 8、i5 上的 SQLiteSpy 和 RAM 中的整个表。
两个查询都花费了大约 1.64 秒,波动非常小(小于 0.1 秒)。大多数情况下,他们在 1.64 秒时是正确的。
查询:
create table t (
a int, b int);
insert into t values (null,null);
insert into t select case when random() < .5 then 1 end, case when random() < .5 then 1 end from t;
insert into t select case when random() < .5 then 1 end, case when random() < .5 then 1 end from t;
insert into t select case when random() < .5 then 1 end, case when random() < .5 then 1 end from t;
insert into t select case when random() < .5 then 1 end, case when random() < .5 then 1 end from t;
insert into t select case when random() < .5 then 1 end, case when random() < .5 then 1 end from t;
insert into t select case when random() < .5 then 1 end, case when random() < .5 then 1 end from t;
insert into t select case when random() < .5 then 1 end, case when random() < .5 then 1 end from t;
insert into t select case when random() < .5 then 1 end, case when random() < .5 then 1 end from t;
insert into t select case when random() < .5 then 1 end, case when random() < .5 then 1 end from t;
insert into t select case when random() < .5 then 1 end, case when random() < .5 then 1 end from t;
insert into t select case when random() < .5 then 1 end, case when random() < .5 then 1 end from t;
insert into t select case when random() < .5 then 1 end, case when random() < .5 then 1 end from t;
insert into t select case when random() < .5 then 1 end, case when random() < .5 then 1 end from t;
insert into t select case when random() < .5 then 1 end, case when random() < .5 then 1 end from t;
insert into t select case when random() < .5 then 1 end, case when random() < .5 then 1 end from t;
insert into t select case when random() < .5 then 1 end, case when random() < .5 then 1 end from t;
insert into t select case when random() < .5 then 1 end, case when random() < .5 then 1 end from t;
insert into t select case when random() < .5 then 1 end, case when random() < .5 then 1 end from t;
insert into t select case when random() < .5 then 1 end, case when random() < .5 then 1 end from t;
insert into t select case when random() < .5 then 1 end, case when random() < .5 then 1 end from t;
insert into t select case when random() < .5 then 1 end, case when random() < .5 then 1 end from t;
insert into t select case when random() < .5 then 1 end, case when random() < .5 then 1 end from t;
insert into t select case when random() < .5 then 1 end, case when random() < .5 then 1 end from t;
select sum(ifnull(a, b)) from t;
select sum(coalesce(a, b)) from t;
select count(*) from t;
【讨论】: