2013-05-22 13 views
6

我有一張擁有1400萬行的表,我正試圖在此表上執行全文搜索。查詢的速度非常慢,對於簡單的二進制AND查詢需要大約9秒的時間。相同的東西立即在我的專用羣集上執行。該表的大小約爲3.1 GB,包含1400萬行。有人可以解釋RDS實例的這種行爲嗎?MySQL在AWS RDS大型實例上全文搜索極其緩慢

SELECT count(*) 
FROM table_name WHERE id=97 
AND match(body) against ('+data +big' IN BOOLEAN MODE) 
+0

請發帖提問 – Stephan

+0

您可以比較兩種環境下的執行計劃嗎?如果不同,請張貼它們。 – RandomSeed

+0

'SELECT Explain'在兩臺機器上顯示相同的東西。 – user883499

回答

3

高IO率通常表示內存不足,或緩衝區太小。一個3GB的表格,包括索引,應該完全適合(每月500美元以內)專用服務器的內存。

MySQL有許多不同的緩衝區,並作爲many parameters來擺弄。下列緩衝是最重要的,它們的大小比較兩種環境:

如果InnoDB的:innodb_buffer_pool_size

如果MyISAM數據:key_buffer_sizeread_buffer_size

0

有你body列添加FULLTEXT index如果沒有的話,試試這個它肯定會帶來很大的區別

ALTER TABLE `table_name` ADD FULLTEXT INDEX `bodytext` (`body`); 

希望它可以幫助

+0

是的,已經有全文索引。 – user883499

0

試試這個

SELECT count(1) 
FROM table_name WHERE id=97 
AND match(body) against ('+data +big' IN BOOLEAN MODE) 

這應該加快一點,因爲你不必計算所有列只是行。

你可以發佈解釋本身嗎?

+0

另外,什麼是最小字長?難道這是一個不可多得的停止詞,因此它只能搜索單詞數據? –

0

由於數據庫版本,表格,索引和執行計劃相同,因此您需要比較機器/羣集配置。比較要點可用CPU功率,單次交易中使用的內核,存儲器讀取速度,內存大小和讀取速度/頻率。我可以看到Amazon提供了各種配置,因此也許您的專用羣集比Amazon RDS實例配置功能強大得多。

要添加到上面,您可以調整CPU,IO和內存之間的負載以提高吞吐量。

0

使用匹配()反對()您在執行您的研究您的整個3GB全文索引,並且在這種情況下無法強制另一個索引。

爲了加快您的查詢,你需要讓你的全文索引更輕,因此您可以:

1 - 從你的全文索引清理所有無用的人物和停用詞

2 - 創建多個全文索引和PEEK適當的一個

3-將全文搜索更改爲LIKE子句並強制其他索引(如「id」)。

0

試着將ID在文本索引,然後說:

比賽(BODY,ID)反對(+大+數據+97)和id = 97

你也可以看看獅身人面像它可以是很容易與mysql一起使用。