0

私のクエリは次のことを意味します:

  • 正しい日付 "DAY-MONTH-YEAR" (02-Dec-1986) を持つ人々のみを計算するように、間違った日付の人々をフィルタリングします。
  • 2 つのパラメーターの間で年齢を計算します。

このタイプのクエリで 1.029 SEC が正常なのか、それとも make が少し遅いという間違ったことをしているのかわからない。最適化できる何かを行った場合、誰かにアドバイスしてもらえますか?

現状では、クエリがかかり( 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

コメントと現在のクエリに基づいて、実際にはテーブルを結合していません。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 に答える