次のように記述されたレストランのMySQLテーブルがあります。
CREATE TABLE `restaurants` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(32) NOT NULL,
`description` varchar(512) NOT NULL,
`tags` varchar(512) DEFAULT NULL,
`type` enum('A','D','E','L','Q','R','P','T','Z') NOT NULL,
`popularity` int(11) DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `uc_type_name` (`type`,`name`),
KEY `name_idx` (`name`),
KEY `type_popularity_idx` (`type`,`popularity`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
テーブルに関するステータス情報を次に示します。
Name: restaurants
Engine: MyISAM
Version: 10
Row_format: Dynamic
Rows: 72999
Avg_row_length: 84
Data_length: 6204488
Max_data_length: 281474976710655
Index_length: 5280768
Data_free: 0
Auto_increment: 75634
Collation: utf8_general_ci
Checksum: NULL
Create_options:
Comment:
特定のレストラン タイプの特定の用語に一致する 6 つの最も人気のあるレストランを返すクエリを作成しようとしています。
SELECT `id`, `name`, `type`, `description` FROM `restaurants`
WHERE `type` = 'A'
AND (`name` LIKE '%some restaurant%'
OR `description` LIKE '%some restaurant%'
OR `tags` LIKE '%some restaurant%')
ORDER BY `popularity` DESC
LIMIT 6
レストラン タイプの 1 つである A には、61,500 のレストランが含まれています。さらに、これらの A タイプのレストランには、比較的長い説明と名前が付けられていることがよくあります。したがって、タイプ A のルックアップの結果がない場合、クエリには 0.8 ~ 0.9 秒かかります。ただし、結果がある場合は、0.1 秒という速さで実行されます。
このクエリのパフォーマンスを高速化するにはどうすればよいですか?