2009-11-22 2 views
1

다른 post에서 쿼리를 읽는 동안 그것은 우연히 발견되었습니다.ORDER BY 내에서 mySQL이 동적 값을 처리하는 방법

예를 들어 다음 쿼리 (주문의 비 실용성을 무시)를 가지고 :

SELECT 
* 
FROM Members 
ORDER BY (TIMESTAMPDIFF(FRAC_SECOND, DateCreated , SYSDATE())) 

말 "회원"테이블이 큰 행 수있다 (또는 쿼리가 될 수있는 충분한 복잡 최소 수십 밀리 초 이상 실행 됨). MySQL 또는 다른 주류 DB 엔진은 "ORDER BY"의 "SYSDATE()"을 어떻게 평가합니까?

"SYSDATE"의 마이크로 초 (FRAC_SECOND)는 1000 X 1000 X 0.5 = 500 000 번 변경됩니다.

  1. 는 "SYSDATE는"쿼리 실행의 시작에 고정받을 않거나 실행이 진행됨에 따라 그 평가 및 변경됩니다 :

    내 질문은?

  2. 후자 인 경우 주문이 뒤죽박죽이 될 수 있다고 생각합니까?

는 UPDATE :
내 원래의 게시물 동적 값의 예로서 NOW를 사용, 그것은 NOW() 지금

+0

ORDER BY에서 사용될 때 SYSDATE는 한 번만 평가됩니다. 그렇지 않으면 SYSDATE가 움직이는 것처럼 움직이는 타겟을 가질 수 있습니다. 동작에 대한 불확실성 때문에 쿼리에서 사용하기 전에 날짜 값을 변수로 설정하는 것이 가장 좋습니다. –

+0

@OMG Pony : Heavy Btyes의 게시물에 따르면 SYSDATE는 실행 중에 한 번만 평가되는 것이 아닙니다. 그렇지 않다고 생각하니? –

답변

3

SYSDATE의 이 시간을 표시하는 상수 시간을 반환되는 문에서 실행하기 시작했다. 이되는 정확한 시간을 반환 SYSDATE()에 대한 행동 다릅니다 (A 저장 기능 또는 또는 트리거 문이 에 시작 함수가 실행되는 시간을 반환 NOW 트리거,(). 내)이 MySQL 5.0.12 중 으로 실행됩니다. 즉

http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_now , 그것은 한 번만 문이 실행될 때 실행됩니다. 각 실행 시간을 확보하려면 그러나, 당신은 MySQL을 5.0.12 현재

SYSDATE

를 사용해야합니다, SYSDATE()는 가 실행되는 시간을 반환합니다. 이 은 이 문이 실행되기 시작한 시간을 나타내는 상수 시간을 반환하는 NOW()의 동작과 다릅니다.

http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_sysdate

업데이트 ( 또는 트리거 문이 에 시작 함수가 실행되는 시간을 반환 NOW 저장 기능 또는 트리거,() 내에서.) :
음에서 내가 아는 것은 Order by이 실행되거나 더 잘 사용된다고 한 번만 말합니다.TIMESTAMPDIFF(FRAC_SECOND, DateCreated , SYSDATE())의 값은 SELECT 문을 실행할 때마다 다를 것입니다. 그래서, 나는 생각한다. (다시 생각해 보자.) ORDER BY은 timestampdiff의 첫 번째 평가 값이나 마지막 값을 고려할 것이다. 어쨌든, 저는 이것을 실행함으로써 매번 무작위 순서를 얻을 것이라고 생각합니다. 어쩌면 나보다 나은 전문가가 더 잘 대답 할 수 있습니다.

+0

아, 알았어요. 질문을 조금만 수정하도록하겠습니다. 그건 훌륭한 정보입니다. +1 –

+0

@ Heavy Bytes : 새로운 하위 질문으로 게시물을 수정했습니다. 그것을 또 다른 기회를주는 신경? :) –

+0

글쎄, 내가 아는 바로는 명령은 실행되거나 더 잘 "한 번만"말했다. SELECT 문을 실행할 때마다 TIMESTAMPDIFF (FRAC_SECOND, DateCreated, SYSDATE())의 값이 달라 지므로 그래서 ORDER BY는 timestampdiff의 첫 번째 평가 된 값 또는 마지막 값을 고려할 것이라고 생각합니다. 어쨌든, 저는 이것을 실행함으로써 매번 무작위 순서를 얻게 될 것이라고 생각합니다. 어쩌면 나보다 나은 전문가가 더 잘 대답 할 수 있습니다. –

관련 문제