2016-09-29 129 views
0

我嘗試優化一個表上的以下查詢包含超過120萬條記錄。搜索查詢優化Mysql

#1 - 執行時間:0.6605,用於項目得到

SELECT * FROM `videos` WHERE MATCH (name,tags) AGAINST ('mytag' IN BOOLEAN MODE) LIMIT 20 

*#2 - 執行時間:0.5186,用於分頁系統*

SELECT COUNT(*) AS `numrows` FROM `videos` WHERE MATCH (name,tags) AGAINST ('mytag' IN BOOLEAN MODE) 

我的桌子的結構

DROP TABLE IF EXISTS `videos`; 
CREATE TABLE `videos` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`name` varchar(255) NOT NULL, 
`name_url` varchar(255) DEFAULT NULL, 
`categories` varchar(255) DEFAULT NULL, 
`embed` tinytext, 
`description` text, 
`tags` varchar(255) DEFAULT NULL, 
`hd` smallint(6) DEFAULT '0', 
`views` int(11) NOT NULL DEFAULT '0', 
`likes` int(11) DEFAULT '0', 
`dislikes` int(11) DEFAULT '0', 
`cover` varchar(255) DEFAULT NULL, 
PRIMARY KEY (`id`,`name`), 
FULLTEXT KEY `categories` (`categories`), 
FULLTEXT KEY `name` (`name`), 
FULLTEXT KEY `tags` (`tags`) 
) ENGINE=MyISAM AUTO_INCREMENT=1273355 DEFAULT CHARSET=latin1; 

對於每個查詢都有快速響應的任何解決方案?

此致

+0

嗯沒有答案...? – NinjaX

+1

大聲笑要耐心等待。 24分鐘,你需要一個答案。我們不爲你工作。 –

+0

並學習如何提問。請閱讀[** How-to-Ask **](http://stackoverflow.com/help/how-to-ask) \t \t這裏是[** START **](http ://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/),瞭解如何提高您的問題質量並獲得更好的答案。 –

回答

0

指標應加載到RAM,但是MyISAM的具有有限大小的緩衝器來存儲索引。您可能需要使用key_buffer_size配置選項來增加MyISAM索引緩衝區的大小。

我不知道你的服務器規格是什麼。它必須是一個相當不足的服務器,因爲我已經對740萬行數據執行了MySQL全文索引測試,並且查詢在16毫秒內執行。這是在Macbook Pro上,真正的服務器應該更快。

查看我的關於在MySQL中的全文搜索的演示文稿:http://www.slideshare.net/billkarwin/practical-full-text-search-with-my-sql

+0

我會切換到彈性搜索,這是更好^^ – NinjaX

+0

Elastic Search內部使用Lucene,與Solr相同。所以性能和可伸縮性應該是可比的。 –