/ / mysql does ifnull (...) utrudniają użycie indeksu? - mysql

mysql does ifnull (...) utrudniają użycie indeksu? - mysql

Mam tabelę z wartościami całkowitymi i muszę zapytać o sumę kolumn:

    id, A, B, C
1, 21, 32, null
2, 9, 0, 124
3, null, null, 6

SELECT * FROM tbl WHERE B+C > 50

To nie działa, ponieważ dodatki z wartością null są niedozwolone. Obecna implementacja polega na ustawieniu wszystkich wartości null na 0 i dodaniu oddzielnej kolumny dla każdej kolumny do określenia, czy 0 rzeczywiście oznacza zero:

id, A, B, C, A_null, B_null, C_null
1, 21, 32, 0, false, false, true
2, 9, 0, 124, false, false, false
3, 0, 0, 6, true, true, false

Nie sądzę, że jest to bardzo eleganckie i chciałbym skorzystać z funkcji ifnull:

SELECT * FROM tbl WHERE ifnull(B,0)+ifnull(C,0) > 50

Czy wiąże się to z dużą karą za wyniki lub innymi wadami?

Tabela ma wiele milionów wierszy.

Odpowiedzi:

0 dla odpowiedzi № 1

Zawsze możesz użyć

    isnull(column_name ,0)

Spowoduje to wstawienie 0 do wartości pustych, a następnie pozwoli je SUMOWAĆ.

Różnica między ifnull a isnull - ifnull przyjmuje dwa argumenty; jeden dla, jeśli wartość jest zerowa i jedna dla, jeśli nie jest.

isnull po prostu wstawia wartość do wszystkich wartości pustych, które moim zdaniem byłyby bardziej proste dla tego pytania.