Rumah > Soal Jawab > teks badan
Medan "A" dalam jadual data T sedia ada, nilai A biasanya dalam bentuk: "12,123,312,1212". Terdapat 100,000 keping data dalam T.
Perlu menanyakan rekod yang mengandungi satu "12" dalam A~
Contohnya:
"123,125,1212,1234,312" tidak mengandungi satu "12", jangan
"1,18,123,1212,321,312" tidak mengandungi satu pun "12", jangan
"1, 12,123,1212,321,312 " mengandungi satu "12" hingga
...
Saya ada 2 kaedah pertanyaan, yang nampaknya agak menyusahkan~ Satu CONCAT dan satu lagi LIKE OR
Tanya sesiapa ada kaedah yang lebih efisyen, terima kasih~
仅有的幸福2017-05-31 10:36:41
Anda boleh mempertimbangkan untuk menambah indeks teks penuh pada medan A dan gunakan carian teks penuh:
ALTER TABLE `T` ADD FULLTEXT (`A`);
SELECT `id` FROM `T`
WHERE MATCH(`A`) AGAINST('12' IN BOOLEAN MODE)
ORDER BY `id` DESC LIMIT 10 OFFSET 0;
Perlu diingatkan bahawa:
Nilai lalai innodb_ft_min_token_size MySQL5.6.4 ialah 3.
Nilai lalai ft_min_word_len MyISAM ialah 4.
Jika panjang minimum indeks yang anda inginkan ialah 2, kemudian konfigurasikannya dalam my. cnf:
innodb_ft_min_token_size =2
ft_min_word_len=2