我在 Drupal 10 项目中工作,我正在使用以下代码进行动态查询:
$query = $this->entityTypeManager->getStorage('node')->getQuery();
$query->accessCheck(FALSE);
$query->condition('status', 1);
$query->condition('type', $node_bundle);
$query->condition($taxonomy_field_name, $node_term_id);
$query->condition('nid', $node->id(), '<>');
$orGroup = $query->orConditionGroup();
foreach($recurrences as $recurrence){
$date_start = $recurrence['value'];
$date_end = $recurrence['end_value'];
$andGroup = $query->andConditionGroup();
$andGroup->condition($smart_date_field_name . '.end_value', $date_start, '>');
$andGroup->condition($smart_date_field_name . '.value', $date_end, '<');
$orGroup->condition($andGroup);
}
$query->condition($orGroup);
$nodes_id = $query->execute();
根据 $recurrences 的数量,查询有或多或少的连接。
使用 dpm($query->__toString()),我得到的查询是:
SELECT base_table.vid AS vid, base_table.nid AS nid
FROM
node base_table
INNER JOIN node_field_data node_field_data ON node_field_data.nid = base_table.nid
INNER JOIN node__field_reserva_sala_sala node__field_reserva_sala_sala ON node__field_reserva_sala_sala.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora ON node__field_reserva_sala_data_i_hora.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_2 ON node__field_reserva_sala_data_i_hora_2.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_3 ON node__field_reserva_sala_data_i_hora_3.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_4 ON node__field_reserva_sala_data_i_hora_4.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_5 ON node__field_reserva_sala_data_i_hora_5.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_6 ON node__field_reserva_sala_data_i_hora_6.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_7 ON node__field_reserva_sala_data_i_hora_7.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_8 ON node__field_reserva_sala_data_i_hora_8.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_9 ON node__field_reserva_sala_data_i_hora_9.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_10 ON node__field_reserva_sala_data_i_hora_10.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_11 ON node__field_reserva_sala_data_i_hora_11.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_12 ON node__field_reserva_sala_data_i_hora_12.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_13 ON node__field_reserva_sala_data_i_hora_13.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_14 ON node__field_reserva_sala_data_i_hora_14.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_15 ON node__field_reserva_sala_data_i_hora_15.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_16 ON node__field_reserva_sala_data_i_hora_16.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_17 ON node__field_reserva_sala_data_i_hora_17.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_18 ON node__field_reserva_sala_data_i_hora_18.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_19 ON node__field_reserva_sala_data_i_hora_19.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_20 ON node__field_reserva_sala_data_i_hora_20.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_21 ON node__field_reserva_sala_data_i_hora_21.entity_id = base_table.nid
WHERE (node_field_data.status = '1') AND (node_field_data.type = 'reserva_sala') AND (node__field_reserva_sala_sala.field_reserva_sala_sala_target_id = '17') AND (node_field_data.nid <> '77') AND (((node__field_reserva_sala_data_i_hora.field_reserva_sala_data_i_hora_end_value > '1681284600') and (node__field_reserva_sala_data_i_hora.field_reserva_sala_data_i_hora_value < '1681290000')) or ((node__field_reserva_sala_data_i_hora_2.field_reserva_sala_data_i_hora_end_value > '1681889400') and (node__field_reserva_sala_data_i_hora_2.field_reserva_sala_data_i_hora_value < '1681894800')) or ((node__field_reserva_sala_data_i_hora_3.field_reserva_sala_data_i_hora_end_value > '1682494200') and (node__field_reserva_sala_data_i_hora_3.field_reserva_sala_data_i_hora_value < '1682499600')) or ((node__field_reserva_sala_data_i_hora_4.field_reserva_sala_data_i_hora_end_value > '1683099000') and (node__field_reserva_sala_data_i_hora_4.field_reserva_sala_data_i_hora_value < '1683104400')) or ((node__field_reserva_sala_data_i_hora_5.field_reserva_sala_data_i_hora_end_value > '1683703800') and (node__field_reserva_sala_data_i_hora_5.field_reserva_sala_data_i_hora_value < '1683709200')) or ((node__field_reserva_sala_data_i_hora_6.field_reserva_sala_data_i_hora_end_value > '1684308600') and (node__field_reserva_sala_data_i_hora_6.field_reserva_sala_data_i_hora_value < '1684314000')) or ((node__field_reserva_sala_data_i_hora_7.field_reserva_sala_data_i_hora_end_value > '1684913400') and (node__field_reserva_sala_data_i_hora_7.field_reserva_sala_data_i_hora_value < '1684918800')) or ((node__field_reserva_sala_data_i_hora_8.field_reserva_sala_data_i_hora_end_value > '1685518200') and (node__field_reserva_sala_data_i_hora_8.field_reserva_sala_data_i_hora_value < '1685523600')) or ((node__field_reserva_sala_data_i_hora_9.field_reserva_sala_data_i_hora_end_value > '1686123000') and (node__field_reserva_sala_data_i_hora_9.field_reserva_sala_data_i_hora_value < '1686128400')) or ((node__field_reserva_sala_data_i_hora_10.field_reserva_sala_data_i_hora_end_value > '1686727800') and (node__field_reserva_sala_data_i_hora_10.field_reserva_sala_data_i_hora_value < '1686733200')) or ((node__field_reserva_sala_data_i_hora_11.field_reserva_sala_data_i_hora_end_value > '1687332600') and (node__field_reserva_sala_data_i_hora_11.field_reserva_sala_data_i_hora_value < '1687338000')) or ((node__field_reserva_sala_data_i_hora_12.field_reserva_sala_data_i_hora_end_value > '1687937400') and (node__field_reserva_sala_data_i_hora_12.field_reserva_sala_data_i_hora_value < '1687942800')) or ((node__field_reserva_sala_data_i_hora_13.field_reserva_sala_data_i_hora_end_value > '1688542200') and (node__field_reserva_sala_data_i_hora_13.field_reserva_sala_data_i_hora_value < '1688547600')) or ((node__field_reserva_sala_data_i_hora_14.field_reserva_sala_data_i_hora_end_value > '1689147000') and (node__field_reserva_sala_data_i_hora_14.field_reserva_sala_data_i_hora_value < '1689152400')) or ((node__field_reserva_sala_data_i_hora_15.field_reserva_sala_data_i_hora_end_value > '1689751800') and (node__field_reserva_sala_data_i_hora_15.field_reserva_sala_data_i_hora_value < '1689757200')) or ((node__field_reserva_sala_data_i_hora_16.field_reserva_sala_data_i_hora_end_value > '1690356600') and (node__field_reserva_sala_data_i_hora_16.field_reserva_sala_data_i_hora_value < '1690362000')) or ((node__field_reserva_sala_data_i_hora_17.field_reserva_sala_data_i_hora_end_value > '1690961400') and (node__field_reserva_sala_data_i_hora_17.field_reserva_sala_data_i_hora_value < '1690966800')) or ((node__field_reserva_sala_data_i_hora_18.field_reserva_sala_data_i_hora_end_value > '1691566200') and (node__field_reserva_sala_data_i_hora_18.field_reserva_sala_data_i_hora_value < '1691571600')) or ((node__field_reserva_sala_data_i_hora_19.field_reserva_sala_data_i_hora_end_value > '1692171000') and (node__field_reserva_sala_data_i_hora_19.field_reserva_sala_data_i_hora_value < '1692176400')) or ((node__field_reserva_sala_data_i_hora_20.field_reserva_sala_data_i_hora_end_value > '1692775800') and (node__field_reserva_sala_data_i_hora_20.field_reserva_sala_data_i_hora_value < '1692781200')) or ((node__field_reserva_sala_data_i_hora_21.field_reserva_sala_data_i_hora_end_value > '1693380600') and (node__field_reserva_sala_data_i_hora_21.field_reserva_sala_data_i_hora_value < '1693386000')))
当我使用 $query->execute() 执行该查询时,数据库会占用所有 CPU 并且无法响应。
如果我用较少的连接执行相同的查询,它工作正常并且它检索值。
此外,如果我直接在mysql客户端上执行相同的查询,我也有同样的问题。
为什么会这样?问题出在哪里?
我的服务器规格