Fulltext Index in MySQL

  1. Inleiding
  2. Zoeken in een MySQL database
  3. Werking van de FULLTEXT index
  4. Relevantie bij een FULLTEXT zoekopdracht.
  5. Boolean FULLTEXT zoekopdrachten
  6. FULLTEXT Query Expansion
  7. Slotwoord en referenties
  8. Reacties op deze tutorial

Zoeken in een MySQL database

Voordat ik de full-text index introduceer in deze tutorial, zal ik eerst een overzicht geven van de meest gebruikelijke methode om te zoeken naar records in een tabel. Laten we eerst eens kijken naar de brongegevens die ik in alle voorbeelden in deze tutorial zal gebruiken.

Gebruikte brongegevens
Om het voorbeeld eenvoudig te houden gebruiken we een tabel waarin we artikelen van een weblog opslaan. De tabel bestaat in eerste instantie uit drie kolommen waarbij enkel een Primary Key index aangemaakt is:
Code
1
2
3
4
5
artikelen
---------
id     (INT)
titel  (VARCHAR)
inhoud (TEXT)

Aangezien de full-text functionaliteit voor alsnog alleen beschikbaar is met de MyISAM storage engine van MySQL, gebruiken we een tabel van dat type.

De inhoud van de tabel ziet er als volgt uit:
Code
1
2
3
4
5
6
7
8
9
10
+----+-------------------------------------+------------------------------------------+
| id | titel                               | inhoud                                   |
+----+-------------------------------------+------------------------------------------+
|  1 | MySQL Tutorial                      | DBMS staat voor DataBase ...             |
|  2 | MySQL op een goede manier gebruiken | Nadat je de volgende stappen ...         |
|  3 | MySQL Optimaliseren                 | In deze tutorial zal ik laten zien ...   |
|  4 | 1001 MySQL tips                     | 1. Start MySQL nooit als root 2. ...     |
|  5 | MySQL vs. YourSQL                   | In de volgende database vergelijking ... |
|  6 | MySQL veiligheid                    | Als je MySQL goed geinstalleerd hebt ... |
+----+-------------------------------------+------------------------------------------+

Zoeken in een tabel met LIKE
De meest gebruikte manier om records in een tabel te zoeken aan de hand van een door de gebruiker ingevulde zoekterm. Zo'n query zal er dan als volgt uitzien:
Code
1
2
3
<?php
$sql 
"SELECT * FROM artikelen WHERE inhoud LIKE '%".$zoekwoord."%'";
?>

Als de gebruiker als zoekwoord 'database' zou invullen, zou de query er als volgt uitzien:
Code
1
SELECT * FROM artikelen WHERE inhoud LIKE '%database%'

En het resultaat van deze query ziet er dan zo uit:
Code
1
2
3
4
5
6
+----+-------------------+------------------------------------------+
| id | titel             | inhoud                                   |
+----+-------------------+------------------------------------------+
|  1 | MySQL Tutorial    | DBMS staat voor DataBase ...             |
|  5 | MySQL vs. YourSQL | In de volgende database vergelijking ... |
+----+-------------------+------------------------------------------+

Waarschijnlijk heb je al eerder gebruik gemaakt van LIKE in je queries, dus dit zal je vrij bekend voorkomen. Hoewel dit een eenvoudige manier is om te zoeken naar records in een tabel levert deze zeker niet altijd de gewenste resultaten. Bovendien zorgen deze queries met LIKE voor een zeker performance verlies zodra de database groter wordt of als je meerdere tabellen in je queries gaat gebruiken.

Als we naar de EXPLAIN van deze query kijken zien we namelijk dat er geen gebruik gemaakt wordt van indexen:
Code
1
2
3
4
5
+----+-------------+-----------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table     | type | possible_keys | key  | key_len | ref  | rows | Extra       |
+----+-------------+-----------+------+---------------+------+---------+------+------+-------------+
|  1 | SIMPLE      | artikelen | ALL  | NULL          | NULL | NULL    | NULL |    6 | Using where |
+----+-------------+-----------+------+---------------+------+---------+------+------+-------------+

De genoemde performance problemen kun je voorkomen door gebruik te maken van de full-text index van MySQL. Op de volgende pagina zal ik ingaan op de werking van deze index.

Vorige Volgende