0

查询时间太长,12 秒。wp_podsrel - 25000 条记录,wp_pods_bars - 1200

SELECT SQL_CALC_FOUND_ROWS DISTINCT `t`.* 
FROM `wp_pods_bars` AS `t` LEFT JOIN `wp_podsrel` AS `rel_city` 
    ON ( `rel_city`.`field_id` = 13918 AND `rel_city`.`item_id` = `t`.`id` ) 
    OR ( `rel_city`.`related_field_id` = 13918 AND `rel_city`.`related_item_id` = `t`.`id` ) 

表的结构

CREATE TABLE `wp_pods_bars` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(128) DEFAULT NULL,
  `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `description` longtext,
  `keywords` longtext,
  `seo_title` varchar(128) DEFAULT NULL,
  `seo_description` varchar(128) DEFAULT NULL,
  `main_homepage_feature` tinyint(1) DEFAULT '0',
  `main_homepage_priority` decimal(12,2) DEFAULT NULL,
  `favourite` tinyint(1) DEFAULT '0',
  `slug` varchar(200) DEFAULT NULL,
  `address` longtext,
  `location` varchar(255) DEFAULT NULL,
  `website` varchar(128) DEFAULT NULL,
  `longtitude` varchar(128) DEFAULT NULL,
  `latitude` varchar(128) DEFAULT NULL,
  `phone` varchar(128) DEFAULT NULL,
  `opening_hours` varchar(128) DEFAULT NULL,
  `hide` tinyint(1) DEFAULT '0',
  `best` tinyint(1) DEFAULT '0',
  `what_to_order` longtext,
  `gay_bar` tinyint(1) DEFAULT '0',
  `opening_soon` tinyint(1) DEFAULT '0',
  `opening_date` varchar(255) DEFAULT NULL,
  `opening_date_2` date NOT NULL DEFAULT '0000-00-00',
  PRIMARY KEY (`id`),
  KEY `hide` (`hide`),
  KEY `opening_soon` (`opening_soon`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1497 ;

CREATE TABLE `wp_pod_rel` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `pod_id` bigint(15) unsigned DEFAULT NULL,
  `sister_pod_id` bigint(15) unsigned DEFAULT NULL,
  `field_id` int(10) unsigned DEFAULT NULL,
  `tbl_row_id` bigint(15) unsigned DEFAULT NULL,
  `weight` int(10) unsigned DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `field_pod_idx` (`field_id`,`pod_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=88681 ;

有没有办法优化它?谢谢

4

1 回答 1

1

First, why are you using different engines? And second, try to split your query like

 SELECT SQL_CALC_FOUND_ROWS DISTINCT `t`.* 
 FROM `wp_pods_bars` AS `t` LEFT JOIN `wp_pod_rel` AS `rel_city` 
 ON (`rel_city`.`item_id` = `t`.`id` ) WHERE  `rel_city`.`field_id` = 13918

 SELECT SQL_CALC_FOUND_ROWS DISTINCT `t`.* 
 FROM `wp_pods_bars` AS `t` LEFT JOIN `wp_pod_rel` AS `rel_city` 
 ON (`rel_city`.`related_item_id` = `t`.`id` ) WHERE `rel_city`.`related_field_id` = 13918

and see what is the result.

于 2013-06-14T22:27:44.997 回答