explain select item_name, rating
from loyalty_visit_items
join loyalty_visits
on loyalty_visits.id = loyalty_visit_items.loyalty_visit_id
where loyalty_visits.parent_venue_id = 3794
結果
1 SIMPLE loyalty_visits ref PRIMARY,parent_venue_id parent_venue_id 4 const 14388
1 SIMPLE loyalty_visit_items ref loyalty_visit_id loyalty_visit_id 5 loyalty.loyalty_visits.id 12 Using where
を助けていないインデックスは、適切に使用しているように見える、まだこのクエリがタイムアウトする前に返さない通常ありません。このデータベースには処理するために必要なものと比べてデータはほとんどありませんので、何が起きているのだろうかと思います。私はこれをアイテムに付けるだけで、親の訪問テーブルから各アイテム行とともに列を表示します。私は完全に行方不明になっているこの結合を行うためのより良い方法はありますか?
**CREATE SHOW TABLE**
CREATE TABLE `loyalty_visits` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`loyalty_member_id` int(11) DEFAULT NULL,
`venue_id` int(11) DEFAULT NULL,
`parent_venue_id` int(11) NOT NULL DEFAULT '0',
`visit_date` datetime DEFAULT NULL,
`check_number` double(11,0) DEFAULT NULL,
`code` varchar(16) DEFAULT NULL,
`spend` decimal(12,2) DEFAULT NULL,
`discount` decimal(11,0) DEFAULT NULL,
`cover_count` int(11) DEFAULT NULL,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
`sms_from_number` varchar(55) DEFAULT NULL,
`rating` int(2) DEFAULT NULL,
`server_id` int(11) DEFAULT NULL,
`server_name` varchar(255) DEFAULT NULL,
`terminal_id` int(11) DEFAULT NULL,
`initial_text_sent` tinyint(1) DEFAULT NULL,
`error` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `visit_date` (`visit_date`),
KEY `parent_venue_id` (`parent_venue_id`),
KEY `idx2` (`code`) USING HASH,
KEY `venue_id_2` (`venue_id`),
KEY `rating` (`rating`),
KEY `idx3` (`loyalty_member_id`) USING HASH,
KEY `spend` (`spend`),
KEY `id` (`id`,`parent_venue_id`)
) ENGINE=Xeround DEFAULT CHARSET=latin1
これは役に立ちます - http://stackoverflow.com/questions/2499976/detecting-locked-tables-mysql-locked-by-lock-table – Andrew
いくつかの 'SHOW CREATE TABLE'出力を見てみましょう。 – Interrobang