다른 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 번 변경됩니다.
- 는 "SYSDATE는"쿼리 실행의 시작에 고정받을 않거나 실행이 진행됨에 따라 그 평가 및 변경됩니다 :
내 질문은?
- 후자 인 경우 주문이 뒤죽박죽이 될 수 있다고 생각합니까?
는 UPDATE :이
내 원래의 게시물 동적 값의 예로서 NOW
를 사용, 그것은 NOW() 지금
ORDER BY에서 사용될 때 SYSDATE는 한 번만 평가됩니다. 그렇지 않으면 SYSDATE가 움직이는 것처럼 움직이는 타겟을 가질 수 있습니다. 동작에 대한 불확실성 때문에 쿼리에서 사용하기 전에 날짜 값을 변수로 설정하는 것이 가장 좋습니다. –
@OMG Pony : Heavy Btyes의 게시물에 따르면 SYSDATE는 실행 중에 한 번만 평가되는 것이 아닙니다. 그렇지 않다고 생각하니? –