Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como otimizar este cálculo de distância Levenshtein


Estou assumindo que levenshtein_ratio é uma função que você escreveu (ou talvez incluída de outro lugar). Nesse caso, o servidor de banco de dados não seria capaz de otimizar isso no sentido normal de usar um índice. Portanto, isso significa que ele simplesmente precisa chamá-lo para cada registro que resulta das outras condições de junção. Com uma junção interna, pode ser um número extremamente grande com esses tamanhos de tabela (no máximo 8000*250000 =2 bilhões). Você pode verificar o número total de vezes que precisaria ser chamado com isso:
SELECT
      count(*)
   FROM
      library a,
      classifications b
   WHERE  
      a.`release_year` = b.`year`
      AND a.`id` IS NULL

Essa é uma explicação de por que é lento (não é realmente uma resposta para a questão de como otimizá-lo). Para otimizá-lo, você provavelmente precisará adicionar fatores limitantes adicionais à condição de junção para reduzir o número de chamadas para a função definida pelo usuário.