sql >> Database >  >> RDS >> Mysql

Hoe deze Levenshtein-afstandsberekening te optimaliseren?

Ik neem aan dat levenshtein_ratio is een functie die je hebt geschreven (of misschien ergens anders hebt opgenomen). Als dat zo is, zou de databaseserver dat niet kunnen optimaliseren in de normale zin van het gebruik van een index. Het betekent dus dat het het gewoon hoeft aan te roepen voor elk record dat voortvloeit uit de andere join-voorwaarden. Met een inner join kan dat een extreem groot aantal zijn met die tabelgroottes (maximaal 8000*250000 =2 miljard). U kunt het totale aantal keren controleren dat het moet worden gebeld met dit:

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

Dat is een verklaring waarom het traag is (niet echt een antwoord op de vraag hoe het te optimaliseren). Om het te optimaliseren, moet u waarschijnlijk aanvullende beperkende factoren toevoegen aan de deelnamevoorwaarde om het aantal oproepen naar de door de gebruiker gedefinieerde functie te verminderen.



  1. mySQL-kolom om array te bevatten

  2. Booleaanse expressie gebruiken in volgorde van clausule

  3. Voor de laatste keer, NEE, u kunt IDENT_CURRENT() niet vertrouwen

  4. Doe mee aan meerdere tafels met behulp van verschillende on