我有以下两个表:
CREATE TABLE `lname` (
`lnameid` binary(16) NOT NULL,
`lid` binary(16) NOT NULL,
`name` varchar(200) NOT NULL,
`namerank` int(11) DEFAULT NULL,
`score` float DEFAULT NULL,
PRIMARY KEY (`lnameid`),
KEY `lid` (`lid`),
FULLTEXT KEY `name` (`name`),
CONSTRAINT `lname_ibfk_1` FOREIGN KEY (`lid`) REFERENCES `sl` (`lid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci
和/或
CREATE TABLE `sl` (
`lid` binary(16) NOT NULL,
`sid` int(11) NOT NULL,
`laid` varchar(20) NOT NULL,
`definition` text DEFAULT NULL,
PRIMARY KEY (`lid`),
KEY `sid` (`sid`),
KEY `laid` (`laid`),
FULLTEXT KEY `definition` (`definition`),
CONSTRAINT `sl_ibfk_1` FOREIGN KEY (`sid`) REFERENCES `s` (`sid`),
CONSTRAINT `sl_ibfk_2` FOREIGN KEY (`laid`) REFERENCES `la` (`laid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci
和以下查询:
EXPLAIN
SELECT MATCH(lname.name) AGAINST ('maillot' IN BOOLEAN MODE) AS nms,
MATCH(sl.definition) AGAINST ('maillot' IN BOOLEAN MODE) AS dms
FROM sl
INNER JOIN lname ON lname.lid = sl.lid
WHERE MATCH(sl.definition) AGAINST ('maillot' IN BOOLEAN MODE) > 0
OR MATCH(lname.name) AGAINST ('maillot' IN BOOLEAN MODE) > 0;
+------+-------------+-----------------+------+---------------+---------------+---------+----------------------------------+--------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+------+-------------+-----------------+------+---------------+---------------+---------+----------------------------------+--------+-------------+
| 1 | SIMPLE | sl | ALL | PRIMARY | NULL | NULL | NULL | 130437 | |
| 1 | SIMPLE | lname | ref | lid | lid | 16 | lid | 1 | Using where |
+------+-------------+-----------------+------+---------------+---------------+---------+----------------------------------+--------+-------------+
正如您所看到的,两个FULLTEXT
索引中没有一个被使用。
如果我只应用一个MATCH
(第一个或第二个,并保持JOIN
子句不变),则使用相应的FULLTEXT
索引。
我不明白为什么多个MATCH
子句突然导致MariaDB停止使用索引
我使用的是MariaDB 10.5.19。
1条答案
按热度按时间yzuktlbb1#
OR强制查询进行全表扫描,因此使用indexdes是没有意义的。
将其更改为
| id|选择类型|表|类型,类型|可能键|键|键透镜|参考|行|额外的|
| - -----|- -----|- -----|- -----|- -----|- -----|- -----|- -----|- -----|- -----|
| 1|初级|吊索|全文|主要,定义|定义|0||1|用在哪里|
| 1|初级|lname|全部|盖|联系我们|联系我们|联系我们|1|用在哪里|
| 2| UNION|吊索|全部|初级|联系我们|联系我们|联系我们|1||
| 2| UNION| lname|全文|盖子,名称|姓名|0||1|用在哪里|
| 联系我们|联合结果|< union1,2>|全部|联系我们|联系我们|联系我们|联系我们|联系我们||
fiddle