Mysql查询运行时间太长

标签 mysql

查询时间太长,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 ;

有什么办法可以优化吗?谢谢

最佳答案

首先,为什么要使用不同的引擎? 其次,尝试像

那样拆分您的查询
 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

看看结果是什么。

关于Mysql查询运行时间太长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17113139/

相关文章:

mysql - 处理具有数百万条记录更新和大量读取的 MySQL 表的最佳方法

mysql - 我想从我的表中以 Json 格式获取 3 条记录,但得到重复项

java - 在我的 Elasticsearch 查询中将逗号放在哪里

C++ 写入和读取 mysql 数据库

mysql - 如何在 Hibernate 中使用 MySql 内存存储引擎?

c# - 详细信息 View 插入后面的代码不起作用

mysql - Fedora phpMyAdmin "Cannot log in to the MySQL server",但 MySql 命令行没问题

javascript - 如何将 javascript 变量写入 sql 数据库?

mysql - 将文本从 MySQL 传递到 spamassassins Spamc 客户端

java - 在 mysql jdbc 中自动生成 key