sql >> Databasteknik >  >> RDS >> Mysql

Är fulltextsökning svaret?

Problemet med sökningen av typen '%keyword%' är att det inte finns något sätt att effektivt söka på den i en vanlig tabell, även om du skapar ett index på den kolumnen. Tänk på hur du skulle se ut den strängen i telefonboken. Det finns faktiskt inget sätt att optimera det - du måste skanna hela telefonboken - och det är vad MySQL gör, en fullbordsskanning.

Om du ändrar den sökningen till "sökord%" och använder ett index, kan du få mycket snabb sökning. Det låter som att det inte är det du vill ha.

Så med det i åtanke har jag använt fulltextindexering/sökning ganska mycket, och här är några för- och nackdelar:

Proffs

  • Mycket snabbt
  • Returnerar resultat sorterade efter relevans (som standard, även om du kan använda valfri sortering)
  • Stoppord kan användas.

Nackdelar

  • Fungerar bara med MyISAM-tabeller
  • Ord som är för korta ignoreras (minimum standard är 4 bokstäver)
  • Kräver annan SQL i where-sats, så du måste ändra befintliga frågor.
  • Matchar inte delsträngar (till exempel "ord" matchar inte "sökord", bara "ord")

Här är lite bra dokumentation om fulltextsökning .

Ett annat alternativ är att använda ett söksystem som Sphinx . Det kan vara extremt snabbt och flexibelt. Den är optimerad för sökning och integrerar väl med MySQL.



  1. Hur kan jag infoga batch i en Oracle-databas med Python?

  2. MySQL TINYINT som osignerad

  3. Hur får man tabellskript i Oracle SQL Developer?

  4. Grundläggande PDO-anslutning till MySQL