我有一个非常大的表(大约 50 GB),但列很少:
CREATE TABLE my_table (
id BIGINT(20) NOT NULL AUTO_INCREMENT,
id_sec BIGINT(20) NULL,
full_name VARCHAR(100) NULL DEFAULT NULL,
PRIMARY KEY (id),
FULLTEXT INDEX fts_full_name (full_name)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
当我执行以下查询时:
SELECT * FROM my_table WHERE MATCH(full_name) AGAINST('lastname middle first ' IN BOOLEAN MODE)
SELECT * FROM my_table WHERE MATCH(full_name) AGAINST('lastname middle first ')
SELECT * FROM my_table WHERE MATCH(full_name) AGAINST('lastname middle first ' IN BOOLEAN MODE) LIMIT 1000
SELECT * FROM my_table WHERE MATCH(full_name) AGAINST('lastname middle first ') LIMIT 1000
SELECT * FROM my_table WHERE MATCH(full_name) AGAINST('lastname middle first ' IN BOOLEAN MODE) LIMIT 100
SELECT * FROM my_table WHERE MATCH(full_name) AGAINST('lastname middle first ') LIMIT 100
有时向我发送以下错误消息:
SQL Error (128): Table handler out of memory
但是当我执行时它不会发生:
SELECT * FROM my_table WHERE MATCH(full_name) AGAINST('+lastname +middle +first ' IN BOOLEAN MODE)
SELECT * FROM my_table WHERE MATCH(full_name) AGAINST('+lastname +middle +first ')
我尝试了以下值,但没有任何改进:
--key-buffer-size=20M
--tmp-table-size=2G
--thread-pool-max-threads=10
--max-connections=100
--max-heap-table-size=2G
--innodb-buffer-pool-size=4G
有谁知道会发生什么?或者我该如何纠正?
我的服务器在 windows 10 (x64)、10.3.12-MariaDB (x64)、32 GB RAM、核心 i7 中运行
谢谢。