我有一个简单的MySQL查询,但是当我添加另一个搜索条件时,它无法在9000秒的合理时间内搜索到。第二列(col2)已建立索引,因此我不确定如何更快地运行此查询? Col1设置为FULL TEXT,并且在没有第二个条件的情况下运行速度很快。任何帮助都会很棒。下面是查询的示例:
SELECT *
FROM table
where
match(col1) against('word1') AND
col2 = 'word2'
limit 500000
答案 0 :(得分:0)
MySQL不会同时使用FULLTEXT索引和常规B树索引来访问表。
请参见https://dev.mysql.com/doc/refman/8.0/en/explain-output.html下的EXPLAIN Join Types。这也称为访问类型。
解释查询时,每个表引用将显示一种访问类型,这是它用来读取表的方法。例如,通过唯一索引,通过非唯一索引,通过表扫描等。
fulltext
是这些访问类型之一。
据我所知,每种访问类型都与其他联接类型互斥。因此,它会在不使用任何其他索引的情况下进行全文本搜索,否则它将在另一列上使用您的索引,在这种情况下,它将不使用全文本索引。
使用非全文索引可能仍然是更好的选择,如果这样可以比全文索引更有效地选择狭窄的行子集。