Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So optimieren Sie diese Berechnung der Levenshtein-Distanz

Ich gehe davon aus, dass levenshtein_ratio ist eine Funktion, die Sie geschrieben (oder vielleicht von woanders eingefügt) haben. In diesem Fall wäre der Datenbankserver nicht in der Lage, dies im normalen Sinne der Verwendung eines Index zu optimieren. Es bedeutet also, dass es einfach für jeden Datensatz aufgerufen werden muss, der sich aus den anderen Join-Bedingungen ergibt. Bei einem Inner Join könnte das bei diesen Tabellengrößen eine extrem große Zahl sein (maximal 8000*250000 =2 Milliarden). Sie können die Gesamtzahl der Aufrufe hiermit überprüfen:

SELECT
      count(*)
   FROM
      library a,
      classifications b
   WHERE  
      a.`release_year` = b.`year`
      AND a.`id` IS NULL

Das ist eine Erklärung dafür, warum es langsam ist (nicht wirklich eine Antwort auf die Frage, wie es optimiert werden kann). Um sie zu optimieren, müssen Sie der Join-Bedingung wahrscheinlich zusätzliche einschränkende Faktoren hinzufügen, um die Anzahl der Aufrufe der benutzerdefinierten Funktion zu reduzieren.