Ben InnoDB depolama motoru üzerinde IN BOOLEAN MODE niteleyicisini kullanmayı tercih ederim. Niteleyici IN BOOLEAN MODE'un kısıtlamaları azdır ve InnoDB depolama motoru genelde zaten güçlüdür. Depolama motoru ne olursa olsun, IN BOOLEAN MODE %50 arama kuralına takılmaz. Full-text aramalarda, InnoDB sonuçları alaka sırasına göre otomatik olarak sıralar.


Gerçekler



Tablo ve test veriler


mysql> SELECT * FROM person;
+----+------+---------+
| id | name | surname |
+----+------+---------+
| 1 | john | |
| 2 | | john |
| 3 | a | |
| 4 | | b |
| 5 | c | c |
| 6 | john | john |
+----+------+---------+
6 rows in set (0.00 sec)

IN NATURAL LANGUAGE MODE niteleyici testi


Depolama motoru MyISAM. Sonuç bulunamadı çünkü, 'john' 3 tane kayıtta mevcut, bu da toplam kayıtların %50'sinden fazla. %50 kuralı sadece MyISAM depolama motoruna mahsustur. Eğer aramadan sonuç almak isterseniz, içinde 'john' olmamak şartıyla bir kaç tane kayıt girmeniz gerekir.


mysql> SELECT *
-> FROM person
-> WHERE
-> MATCH(`name`, `surname`) AGAINST ('john' IN NATURAL LANGUAGE MODE);
Empty set (0.00 sec)

Depolama motoru InnoDB. Sonuç bulundu çünkü, %50 kuralı InnoDB depolama motoruna mahsus değildir. Sonuçlar alaka sırasına göre otomatik olarak sıralandı.


mysql> SELECT *
-> FROM person
-> WHERE
-> MATCH(`name`, `surname`) AGAINST ('john' IN NATURAL LANGUAGE MODE);
+----+------+---------+
| id | name | surname |
+----+------+---------+
| 6 | john | john |
| 1 | john | |
| 2 | | john |
+----+------+---------+
3 rows in set (0.00 sec)

IN BOOLEAN MODE niteleyici testi


Depolama motoru MyISAM. Sonuç bulundu çünkü, %50 kuralı IN BOOLEAN MODE niteleyicisine mahsus değildir. Sonuçlar alaka sırasına göre otomatik olarak sıralanmazlar.


mysql> SELECT *
-> FROM person
-> WHERE
-> MATCH(`name`, `surname`) AGAINST ('john' IN BOOLEAN MODE);
+----+------+---------+
| id | name | surname |
+----+------+---------+
| 1 | john | |
| 2 | | john |
| 6 | john | john |
+----+------+---------+
3 rows in set (0.00 sec)

Depolama motoru InnoDB. Sonuç bulundu çünkü, %50 kuralı IN BOOLEAN MODE niteleyicisine mahsus değildir. Sonuçlar alaka sırasına göre otomatik olarak sıralandı.


mysql> SELECT *
-> FROM person
-> WHERE
-> MATCH(`name`, `surname`) AGAINST ('john' IN BOOLEAN MODE);
+----+------+---------+
| id | name | surname |
+----+------+---------+
| 6 | john | john |
| 1 | john | |
| 2 | | john |
+----+------+---------+
3 rows in set (0.00 sec)