任何人都可以在 MySQL 中调整给定的查询吗

Posted

技术标签:

【中文标题】任何人都可以在 MySQL 中调整给定的查询吗【英文标题】:Can anyone tune given query in MySQL 【发布时间】:2021-03-15 18:14:50 【问题描述】:

请帮助调整此查询

select
    substr(Extend(current,year to second)- extend(outr.eventDateTime,year to second)+INTERVAL(300)  MINUTE(3) TO MINUTE,-8) as duration, 
    else 'Hold' end as state 
    from 
    A as outr,
    B as rs 
    where  
    eventDateTime = (select max(eventDateTime) from A as innr  where outr.aID=innr.aID and outr.pID=innr.pID)
    and eventDateTime >= Date(current) 
    and rs.rID = outr.aID
    and rs.pID = outr.pID 
    order by rName

【问题讨论】:

添加 EXPLAIN PLAN.... 的输出,以及使用的表的 DDL,以及 UDF Extend 的定义。 是的,显示explain select substr....show create table Ashow create table Bselect version() 的输出。还要说明查询花费了多长时间以及您希望花费多长时间的目标 是的,数据库服务器现在已关闭。你能告诉我运行的确切命令吗?因为我是 mysql 的初学者。所以我可以得到所有结果并告诉你。 请使用现代连接语法,而不是 80 年代的逗号分隔语法。 另外,请在每列前面加上表名(或别名),以便我们了解每列的来源。这对你来说可能很明显,但对我们来说不是。特别是eventDateTimerName 【参考方案1】:

对于初学者,请添加此索引:

INDEX(aid, pid)

这闻起来像“分组最大值”。查看我添加的标签。

【讨论】:

以上是关于任何人都可以在 MySQL 中调整给定的查询吗的主要内容,如果未能解决你的问题,请参考以下文章

使用未在 Mysql 中排序的多个日期范围查询给定月份的日期范围间隙

将 Oracle 查询转换为 MySQL 查询

查询给定列表中的标签值

我在 php 中编写了一个 sql 查询,任何人都可以建议这段代码可以工作吗?

MySQL中经纬度范围内的查询

使用Talend中的tHiveRow组件运行多个配置单元查询