>  Q&A  >  본문

이 쿼리 업데이트가 성공적으로 실행되지 않는 이유는 무엇입니까?

<p>고객(3000행)과phone_call_log(350,000행)라는 2개의 테이블이 있습니다. </p> <p>통화 기록을 사용하여 각 고객의 마지막 통화 시간을 구현해야 합니다(프런트엔드 검색의 경우 더 빠름). </p> <p>색인은 다음과 같습니다.</p>
P粉885562567P粉885562567413일 전509

모든 응답(2)나는 대답할 것이다

  • P粉009186469

    P粉0091864692023-09-04 14:58:45

    가장 빠르다

    전화가 올 때 업데이트되도록 데이터 스트림을 변경하세요customers.last_call.

    연결 업데이트

    UPDATEJOIN相比,IN ( SELECT ... )효과가 더 좋습니다.

    또는

    OR会降低性能。查询很可能会为每个客户扫描整个phone_call_log.

    한 가지 해결 방법은 두 가지 UPDATE를 수행하고 적절한 색인을 사용하는 것입니다.

    으아악

    이를 위해서는 phone_call_log에 다음 색인을 생성해야 합니다:

    으아악

    현재 단일 열 인덱스 호출자와 호출 수신자를 삭제합니다.

    데이터 유형

    전화번호는 BIGINT可能是错误的,特别是考虑到LENGTH(customers.phonenumber) > 6를 사용하세요.

    사실 이 모든 것은 간단한 테스트로 요약됩니다:

    으아악

    >检查都会检查NOT NULL; 데이터 유형에 따라 하나만 사용하고 색인을 생성하세요.

    (제공해 주세요SHOW CREATE TABLE; '영어'는 정확하지 않습니다.)

    회신하다
    0
  • P粉354602955

    P粉3546029552023-09-04 10:38:38

    OR를 사용하는 쿼리는 색인을 효율적으로 사용할 수 없습니다. 다음을 시도해 보시기 바랍니다:

    으아악

    GREATEST에는 NULL 값을 처리하는 데 문제가 있습니다.

    회신하다
    0
  • 취소회신하다