Mysql - wie kann man die Volltextsuche mit einem anderen Index unterstützen?
Angenommen, ich habe eine "Artikel" -Tabelle mit den folgenden Spalten:
article_text: fulltext indexed
author_id: indexed
Jetzt möchte ich nach einem Begriff suchen, der in einem Artikel vorkommt, den ein bestimmter Künstler geschrieben hat.
so etwas wie:
select * from articles
where author_id=54
and match (article_text) against ('foo');
Die Erklärung für diese Abfrage sagt mir, dass MySQL nur den Volltextindex verwenden wird. Ich glaube, dass MySQL nur 1 Index verwenden kann, aber es scheint eine kluge Idee zu sein, alle Artikel, die ein bestimmter Autor geschrieben hat, zuerst abzurufen, bevor im Volltext nach dem Begriff gesucht wird.
Zum Beispiel ... wenn Sie selbst mitgemacht haben?
select articles.* from articles as acopy
join articles on acopy.author_id = articles.author_id
where
articles.author_id = 54
and match(article_text) against ('foo');
Das EXPLAIN hierfür listet zuerst die Verwendung des Index author_id und dann die Volltextsuche auf.
Bedeutet das, dass es tatsächlich nur die Volltextsuche für die begrenzte Menge ausführt, die von author_id gefiltert wird?
NACHTRAG
Erklären Sie den Plan für den Self-Join wie folgt:
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: acopy
type: ref
possible_keys: index_articles_on_author_id
key: index_articles_on_author_id
key_len: 5
ref: const
rows: 20
filtered: 100.00
Extra: Using where; Using index
*************************** 2. row ***************************
id: 1
select_type: SIMPLE
table: articles
type: fulltext
possible_keys: index_articles_on_author_id,fulltext_articles
key: fulltext_articles
key_len: 0
ref:
rows: 1
filtered: 100.00
Extra: Using where
2 rows in set (0.00 sec)