2016-09-29 15 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と同じです。したがって、パフォーマンスとスケーラビリティは同等でなければなりません。 –