Вопрос

From SQLite site,

The ifnull() function is equivalent to coalesce() with two arguments.

Then, if I have two arguments, which one is faster?

Это было полезно?

Решение

I have confirmed Gordon Linoff's statement with some experiments. Setup: SQLiteSpy on Windows 8, i5 and the whole table in RAM.

Either query took about 1.64 secs with very small fluctuations (less than .1 sec). Most of the time they were right on 1.64 secs.

Queries:

    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;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top