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.