Avatar billede Slettet bruger
14. november 2001 - 01:02 Der er 8 kommentarer og
1 løsning

Full-Text search

Jeg har nu testet full-text search (http://www.mysql.com/doc/F/u/Fulltext_Search.html) for at forsøge at forbedre min søgetid. Jeg bruger denne query:

SELECT * FROM articles WHERE MATCH (title,body) AGAINST (\'database\');

Men ved bare 100.000 records tager søgningen nu 8 sekunder mod under 1 sekund ved alm. LIKE søgning.

Kan denne MATCH metode bruges til at forbedre det < 1 sekund, og hvordan?
Avatar billede alvion Nybegynder
14. november 2001 - 01:13 #1
Må man se din CREATE TABLE definition?
Avatar billede Slettet bruger
14. november 2001 - 01:27 #2
Jeg har brugt den fra http://www.mysql.com/doc/F/u/Fulltext_Search.html

mysql> CREATE TABLE articles (
    ->  id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
    ->  title VARCHAR(200),
    ->  body TEXT,
    ->  FULLTEXT (title,body)
    -> );

mysql> INSERT INTO articles VALUES
    -> (0,\'MySQL Tutorial\', \'DBMS stands for DataBase Management ...\'),
    -> (0,\'How To Use MySQL Efficiently\', \'After you went through a ...\'),
    -> (0,\'Optimising MySQL\',\'In this tutorial we will show how to ...\'),
    -> (0,\'1001 MySQL Trick\',\'1. Never run mysqld as root. 2. Normalise ...\'),
    -> (0,\'MySQL vs. YourSQL\', \'In the following database comparison we ...\'),
    -> (0,\'MySQL Security\', \'When configured properly, MySQL could be ...\');
Avatar billede alvion Nybegynder
14. november 2001 - 01:32 #3
Prøv i din MySQL konsol at skrive:

EXPLAIN SELECT * FROM articles WHERE MATCH (title,body) AGAINST (\'database\');
Avatar billede Slettet bruger
14. november 2001 - 01:35 #4
Øh... MySQL konsol? :)
Avatar billede alvion Nybegynder
14. november 2001 - 02:02 #5
I en dos-prompt skriver du (jeg formoder at du bruger WinXX):

c:\\>mysql -ubrugernavn -padgangskode databasenavn

Du er nu inde i mysql konsollen, hvilket symboliseres med følgende prompt:

mysql>

Og der skriver du så ovenstående...
Avatar billede Slettet bruger
14. november 2001 - 02:13 #6
mysql> EXPLAIN SELECT * FROM articles WHERE MATCH (title,body) AGAINST (\'database\');
+----------+----------+---------------+-------+---------+------+------+------------+
| table    | type    | possible_keys | key  | key_len | ref  | rows | Extra  |
+----------+----------+---------------+-------+---------+------+------+------------+
| articles | fulltext | title        | title |      0 |      |    1 | where used |
+----------+----------+---------------+-------+---------+------+------+------------+
1 row in set (0.05 sec)
Avatar billede alvion Nybegynder
14. november 2001 - 03:11 #7
Prøv så lige at køre din query i konsollen uden EXPLAIN foran, og se hvor længe MySQL er om det.
Avatar billede Slettet bruger
14. november 2001 - 10:33 #8
Den var 10,29 sekunder om det...
Avatar billede Slettet bruger
16. marts 2002 - 16:17 #9
.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester