0

我的查询是为了:

  • 过滤人们不正确的日期,以便它只计算具有正确日期“DAY-MONTH-YEAR”的人(1986 年 12 月 2 日)
  • 计算两个参数之间的年龄。

我不知道 1.029 SECs 对于这种类型的查询是否正常,或者我做错了什么,使得速度有点慢。如果我做了一些可以优化的事情,谁能给我建议?

就目前而言,我的查询需要( 870,968 total, Query took 1.0297 sec) ,实际查询是

SELECT  DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(STR_TO_DATE(m.m_dob, '%d-%b-%Y'))), '%Y')+0 AS age  
FROM impressions AS i, mariners AS m  
WHERE STR_TO_DATE(m.m_dob, '%d-%b-%Y') IS NOT NULL 
  AND m_dob != '' 
  AND DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(STR_TO_DATE(m.m_dob, '%d-%b-%Y'))), '%Y')+0 BETWEEN 13 AND 50 
ORDER BY `age`  DESC
4

1 回答 1

2

根据您的评论和当前查询,您实际上并没有加入您的表。这两个表需要连接:

SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(STR_TO_DATE(m.m_dob, '%d-%b-%Y'))), '%Y')+0 AS age  
FROM impressions AS i   
INNER JOIN mariners AS m  
  ON i.SessionId = m.ID
WHERE i.impression =1
  AND STR_TO_DATE(m.m_dob, '%d-%b-%Y') IS NOT NULL 
  AND m_dob != '' 
  AND DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(STR_TO_DATE(m.m_dob, '%d-%b-%Y'))), '%Y')+0 BETWEEN 13 AND 50 
ORDER BY `age` DESC

您当前的查询返回日期的笛卡尔结果

于 2013-03-15T11:42:42.013 回答