Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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 如何在SQL中从查询中检索到的任何日期向后移动几个月?_Mysql_Sql - Fatal编程技术网

Mysql 如何在SQL中从查询中检索到的任何日期向后移动几个月?

Mysql 如何在SQL中从查询中检索到的任何日期向后移动几个月?,mysql,sql,Mysql,Sql,我想从任何给定的日期向后移动。请帮助我从给定日期起提前3个月 我已经尝试了DATE\u SUB、DATE\u ADD函数,这些函数不返回任何结果,并继续运行查询 SELECT * FROM Table a INNER JOIN Tabel e on a.MobileNumber=e.Phone_number AND e.bill_date<a.invoice_date AND e.bill_date>DATE_ADD(a.invoice_date,INTERVAL -3 MO

我想从任何给定的日期向后移动。请帮助我从给定日期起提前3个月

我已经尝试了DATE\u SUB、DATE\u ADD函数,这些函数不返回任何结果,并继续运行查询

SELECT * FROM Table a 
INNER JOIN Tabel e 
on a.MobileNumber=e.Phone_number 
AND e.bill_date<a.invoice_date
AND  e.bill_date>DATE_ADD(a.invoice_date,INTERVAL -3 MONTH)
从表a中选择*
内连接表e
在a.MobileNumber=e.Phone_号码上
和e.账单日期日期日期添加(a.发票日期,间隔3个月)

查询保持运行,永不停止。如果我只删除最后一个条件,它将在不到一秒钟的时间内显示结果。

沿以下行添加索引可能有助于提高性能:

CREATE INDEX idx ON table_e (Phone_number, bill_date, col1, col2);

这里的
col1
col2
是可能出现在
SELECT
子句中的另外两列。如果使用此索引,其策略是扫描相对较小的
表a
,该表只有309条记录。对于
a
中的每个记录,MySQL将使用上述索引在
e
表中快速查找匹配的记录。

如果可以更新,则最好在
a.invoice\u date
和上创建
索引。请找到相同的表格。

这些表格有多大?性能问题的答案在某种程度上取决于此。其中一个有309条记录,另一个有1.8米记录。哪个记录有309条,哪个记录有1.8米?另外,您可以发布这两个表的表定义吗?表a有309条记录,表e有1.8m条记录,我正在尝试应用内部连接。您建议的索引的可能副本不包括连接条件。为什么您认为这会有帮助?对查询运行
EXPLAIN
。正在使用索引吗?我认为查询需要更多的时间来计算DATE_ADD函数中的值,该函数使用表a中的日期,表a中只有309条记录。在表_e上添加索引没有帮助。请编辑您的问题并包括两个表定义。显然,如果我建议的索引没有被使用,我的答案对你没有帮助。那么非常感谢@Tim Query至少在230秒后向我展示了结果。我将尝试进一步调查您建议的索引是否已被使用。听起来似乎正在使用,但如果索引包含将在
SELECT*
中显示的所有列,则该索引将非常有用。