Mysql Beklenmedik Sonuçlar

1- NULL ARAMA YAPMAK

SELECT  *
FROM    a
WHERE   a.column = NULL

Bu sorgu mysql optimizer tarafından yok sayılacaktır.

SELECT  *
FROM    a
WHERE   a.column IS NULL

Şeklinde arama yapılmalıdır.

2- LEFT JOIN PERFORMANSI

SELECT  *
FROM    a
LEFT JOIN
        b
ON      b.a = a.id
WHERE   b.column = 'something'

Aşağıdaki sorgu daha performanslıdır

SELECT  *
FROM    a
LEFT JOIN
        b
ON      b.a = a.id
        AND b.column = 'something'

3 – Küçük ama NULL olmayan araması

SELECT  *
FROM    b
WHERE   b.column < 'something'
        AND b.column IS NOT NULL

Bu query hatalı değildir fakat buradaki IS NOT NULL gereksizdir.

4 – Join Null Sorunu

SELECT  *
FROM    a
JOIN    b
ON      a.column = b.column

Stunlar null değer kabul ettiğinde yukarıdaki query null stunları kapsamaz.
NULL değerler birbirine eşit olamaz. Doğru sorgu şu şekilde olmalıdır:

SELECT  *
FROM    a
JOIN    b
ON      a.column = b.column
        OR (a.column IS NULL AND b.column IS NULL)

5 – NOT IN Kullanımında NULL Sorunu

SELECT  a.*
FROM    a
WHERE   a.column NOT IN
        (
        SELECT column
        FROM    b
        )

Bu sorgu, b.column’da tek bir NULL varsa, hiçbir şey döndürmez. IN ve NOT IN NULL karşısında NULL olarak değerlendirilir.

SELECT  a.*
FROM    a
WHERE   NOT EXISTS
        (
        SELECT NULL
        FROM    b
        WHERE   b.column = a.column
        )

IN’den farklı olarak, EXISTS daima doğru veya yanlış olarak değerlendirilir.

6 – Random verinin sıralanması

SELECT  *
FROM    a
ORDER BY
        RAND(), column
LIMIT 10

Bu sorgu, sütun sırasına göre sıralanmış 10 rastgele kayıt seçer.
ORDER BY da ilk ifadenin değerleri eşit olduğunda, kayıtlar ikinci ifadeye göre sıralanır.
RAND () sonuçlar rasgele seçilmiştir. RAND () değerlerinin eşleşmesi mümkün değildir, bu nedenle RAND () sonrasında sütun ile sıralama yapmak gereksizdir.Bu amaçla yazılmış sorgu şu şekilde olmalıdır.

SELECT  *
FROM    (
        SELECT  *
        FROM    mytable
        ORDER BY
                RAND()
        LIMIT 10
        ) q
ORDER BY
        column

Yazının orjinal haline buradan ulaşabilirsiniz.

10 things in MySQL (that won’t work as expected)