2013-03-02 4 views
0

테이블에 대한 업데이트 절차를 만들 때이 있지만, 예를 들어 Personinfo을 그냥 빨리 문제라고되어이 허용MYSQL IFNULL 적절한 사용

Update Person 
Set 
    FirstName = IFNULL(_FirstName, FirstName), 
    LastName = IFNULL(_LastName, LastName) 
    Where PID = _PID 

레코드 또는해야으로 부분적인 업데이트를 수행하기위한 모든 것이 좋습니다이 있습니다 모든 정보는 관계없이 보내질 수 있습니까?

+0

당신의 대답은 나에게 좋을 것 같습니다. - WHERE 절 앞에있는 마지막 쉼표를 제거하십시오. 이것은 _FirstName을 전달한 것으로 가정하고 NULL 값으로 전달 될 수 있습니다. – sgeddes

+0

IFNULL()이 성능에 기인하여 null을 돌려 보낼 가치가 없을 수도 있는지 궁금한가요? – SCFi

답변

0

IFNULL은 exp1이 null이 아닌 경우 exp2를 반환합니다.

저장 프로 시저에 전달한 매개 변수가 설정되지 않은 경우 '성'과 '성'의 고정 문자열을 반환한다고 가정합니다. 나는 당신이 업데이트/선택 속도와 데이터 취하기와 관련하여 말하고있는 퍼포먼스에 의해 연기한다.

응용 프로그램의 이유로 성능에 대해 걱정하지 않고 NULL 또는 고정 문자열을 원한다면 (이 문제와 관련된 성능 문제가 아직없는 경우) 스스로에게 질문해야합니다.

성능에 영향을 미칠 수 있지만 행 크기가 제한을 초과하는 경우에만 문제가 발생해야합니다. 테이블의 내부 표현에는 최대 행 크기가 65,535 바이트입니다. 이를 초과하지 않으려는 경우 고정 문자열과 NULL 사이의 성능 차이는 고려할 가치가 없습니다.

항상 길이가 같고 단편화되지 않으므로 CHAR 유형을 선택할 수도 있습니다. 하지만 NULL이 아닌 빈 값을 저장해야합니다.

+0

의견을 보내 주셔서 감사합니다. – SCFi