Como a otimização de consulta fuzzy MySQL

link original: https: //www.cnblogs.com/whyat/p/10512797.html

% Xxx% dessa maneira por uma pequena quantidade de dados, que caiu livre para usar, mas a grande quantidade de dados, vamos experimentar o desempenho da consulta problema, como o carro como inclinação dura barriga de envelhecimento, e desta forma e não usar o índice, mas a varredura completa da tabela

consultas difusos mysql eficientes em vez de como

而对于xxx% 或者%xxx方式,explain一下可以发现查询使用到了索引,性能提升了不少,当然这种方式不适用与所有的查询场景。
可以采取以下的函数进行查询。
LOCATE ( 'substr', str, pos) método 
POSITION ( 'substr' no campo) Método 
INSTR (str, 'substr') Método

Se o índice de eficiência consulta: table.field like '% AAA%' em vez disso pode localizar ( 'AAA', table.field)> 0

  Voltar substring substr na primeira aparece a corda str, se não str substr dentro, de retorno 0. O
MySQL> selecione o LOCATE ( 'bar', 'foobarbar'); -.> 4 MySQL> selecione o LOCATE ( 'XBar' , 'foobar'); -> 0

Esta função é multi-byte fiável.

Subsequência substr retorna a posição da primeira ocorrência do string str, começando a partir dos pos de posição. Se não Substr em str, retornará 0.
mysql> selecione LOCALIZAR ( 'bar' , 'foobarbar', 5); -> 7

 

mysql como método de consulta fuzzy para melhorar a eficiência do trabalho maravilhoso

A tabela de dados, provavelmente, cerca de 400.000, com um título como campo de consulta difusa, muito lentamente, o índice de campo de título tenha sido estabelecida, mysql someTitle% dessas consultas difusos sobre a premissa do índice é muito rápido.
Então, seguindo estes dois sql diferença declaração é muito grande 
$ sql1 = "...... título como someTitle %" ( chamadas de 0,001 segundos)
$ SQL2 = '% someTitle% ...... título como' (chamadas 0,8 segundos)
que a eficácia das duas diferença de 800 vezes, que é ah significativa.
Então, eu tenho uma ideia: a premissa do método sem palavra de memória do campo de título, além de um prefixo especial, como "im_prefix", como um título do registro = "Eu estava dirigindo o partido", quando ele é armazenado em armazenado como "im_prefix eu estava indo a festa."
Quando Desta forma, queremos pesquisa "partido título" difusa as palavras-chave, colocar o SQL escrito assim:
$ SQL1 = "...... como o título im_prefix %% partido título" (leva 0.001 segundos), visor frontal quando dados é natural para tomar a título de filtro para fora "im_prefix" o prefixo

Acho que você gosta

Origin www.cnblogs.com/lvchengda/p/12532193.html
Recomendado
Clasificación