Heim  >  Fragen und Antworten  >  Hauptteil

PHP – Frage zur MySQL-Abfragemethode

Feld „A“ in der vorhandenen Datentabelle T, der Wert von A hat normalerweise die Form: „12.123.312.1212“. Es gibt 100.000 Daten in T.

Es müssen die Datensätze abgefragt werden, die eine einzelne „12“ in A~

enthalten

Zum Beispiel:
„123,125,1212,1234,312“ enthält keine einzelne „12“, nicht
“1,18,123,1212,321,312“ enthält keine einzelne „12“, nicht
“1, 12.123.1212.321.312 " enthält eine einzelne „12“ bis
...

Ich habe zwei Abfragemethoden, was etwas umständlich erscheint ~ Eine ist CONCAT und die andere ist LIKE OR

Fragen Sie, ob jemand eine effizientere Methode hat, danke~

PHPzPHPz2722 Tage vor625

Antworte allen(1)Ich werde antworten

  • 仅有的幸福

    仅有的幸福2017-05-31 10:36:41

    可以考虑给字段A添加全文索引,使用进行全文检索:

    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;

    需要注意的是:
    MySQL5.6.4的 innodb_ft_min_token_size 的默认值为3.
    MyISAM的 ft_min_word_len 的默认值为4.
    如果你要索引的最小长度是2,那就要在my.cnf配置:
    innodb_ft_min_token_size=2
    ft_min_word_len=2

    Antwort
    0
  • StornierenAntwort