Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql查询在或条件下运行太长_Mysql - Fatal编程技术网

Mysql查询在或条件下运行太长

Mysql查询在或条件下运行太长,mysql,Mysql,以下是12秒后的查询 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 `r

以下是12秒后的查询

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` ) 
如果我这样做

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` )

每个查询运行0,09秒。为什么会这样?如何解决

编辑:

结果

id,select_type,table,type,possible_keys,key,key_len,ref,rows,Extra
1,SIMPLE,t,ALL,NULL,NULL,NULL,NULL,1340,Using temporary
1,SIMPLE,rel_city,ref,rel_field_rel_item_idx,rel_field_item_idx,rel_field_rel_item_idx,14,const,barchick.t.id,1,Using index; Distinct
id,select_type,table,type,possible_keys,key,key_len,ref,rows,Extra
1,SIMPLE,t,ALL,NULL,NULL,NULL,NULL,1340,Using temporary
1,SIMPLE,rel_city,ref,rel_field_rel_item_idx,rel_field_item_idx,rel_field_rel_item_idx,14,const,barchick.t.id,1,Using index; Distinct 
第二

EXPLAIN SELECT SQL_CALC_FOUND_ROWS DISTINCT `t`.* FROM `wp_pods_bars` AS `t` 
LEFT JOIN `wp_podsrel` AS `rel_city` ON 
( `rel_city`.`related_field_id` = 13918 AND `rel_city`.`related_item_id` = `t`.`id` ) 
结果

id,select_type,table,type,possible_keys,key,key_len,ref,rows,Extra
1,SIMPLE,t,ALL,NULL,NULL,NULL,NULL,1340,Using temporary
1,SIMPLE,rel_city,ref,rel_field_rel_item_idx,rel_field_item_idx,rel_field_rel_item_idx,14,const,barchick.t.id,1,Using index; Distinct
id,select_type,table,type,possible_keys,key,key_len,ref,rows,Extra
1,SIMPLE,t,ALL,NULL,NULL,NULL,NULL,1340,Using temporary
1,SIMPLE,rel_city,ref,rel_field_rel_item_idx,rel_field_item_idx,rel_field_rel_item_idx,14,const,barchick.t.id,1,Using index; Distinct 

您拥有的
LEFT
联接是多余的,因为您没有对结果中的任何内容使用右表。联接产生的任何重复行都将被
DISTINCT
删除

因此,您的查询相当于从表中获取所有行的查询(只要
wp\u pods\u bars
中有主键或唯一键):

不同的
、无
加入
、无



MariaDB中有一个功能,名为(另请参见中的说明)这可能会按照您的意愿工作,并消除连接,但当然,从MySQL切换到MariaDB对您来说可能不是一个可用的选项。

您拥有的
连接是多余的,因为您没有对结果中的任何内容使用右表。联接产生的任何重复行都将被
DISTINCT
删除

因此,您的查询相当于从表中获取所有行的查询(只要
wp\u pods\u bars
中有主键或唯一键):

不同的
、无
加入
、无



MariaDB中有一个功能,名为(另请参见中的说明)这可能会按照您的意愿工作并消除连接,但当然,从MySQL切换到MariaDB对您来说可能不是一个可用的选项。

您是否有
t.id
rel\u city.rel\u item\u id
的索引?为每个查询添加
解释
,并粘贴结果。@hjpotter92检查我的编辑您的查询是否产生与此不同的结果:<代码>从wp_pods_条中选择t.*作为t
@ypercube,是的,两个查询返回相同的结果。@hjpotter92检查我的编辑您的查询是否产生了与此不同的结果:<代码>从wp_pods_条中选择t.*作为t
@ypercube,是两个查询返回相同的结果
SELECT t.* FROM wp_pods_bars AS t ;