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)

Antworten auf die Frage(1)

Ihre Antwort auf die Frage