문제

아래 패턴을 따르는 데이터 페이지를 기본적으로 검색하는 MySQL 쿼리 속도를 높이고 싶습니다.

select
 my_field_A,
 my_field_B
where
 time_id >= UNIX_TIMESTAMP('1901-01-01  00:00:00') AND
 time_id < UNIX_TIMESTAMP('2009-01-16  00:00:00')

필드 time_id MySQL 인덱스이지만 쿼리는 전체 데이터베이스가 각 쿼리에서 읽은 것처럼 동작합니다 (이미 두 줄을 검색하는 것은 이미 매우 느립니다). 나는 MySQL 전문가가 아닙니다. 누군가 내가 뭘 잘못하고 있는지 추측 할 수 있습니까?

도움이 되었습니까?

해결책

time_id에 인덱스 (b-tree)가 있는지 확인하십시오. 범위 쿼리에 효율적이어야합니다. 또한 Time_id가 적절한 시간 형식인지 확인하십시오.

MySQL이 무엇을하고 있는지 정말로 이해하고 싶다면 키워드 '설명'을 추가하여 쿼리를 추가하고 MySQL 클라이언트에서 실행할 수 있습니다. 이것은 MySQL이 수행하는 일과 어떤 종류의 스캔이 수행되는지에 대한 정보를 보여줍니다.

http://dev.mysql.com/doc/refman/55.0/en/using-explain.html

다른 팁

아마도 많은 것이 있기 때문에 time_id이 기준에 따라 떨어지고 MySQL 전체 테이블 스캔이 더 좋다고 생각할 수 있습니다.

인덱스를 강요 해보세요 :

SELECT
 my_field_A,
 my_field_B
FROM mytable FORCE INDEX (index_name_on_time_id)
WHERE
 time_id >= UNIX_TIMESTAMP('1901-01-01  00:00:00') AND
 time_id < UNIX_TIMESTAMP('2009-01-16  00:00:00')

더 낮은 범위가 필요합니까? 1901 년 이전에 출품작이 있습니까? Time_id 열은 어떻게 생성됩니까? Time_id가 항상 새로운 항목이 DB에 추가 될 때 항상 더 큰 경우 2009-01-16에 가장 가까운 항목으로 ID를 찾은 다음 ID를 선택하는 것을 고려할 수 있습니다.

select my_field_A, my_field_B
FROM
  mytable
WHERE
  id <= ?

그렇지 않은 경우 MySQL 5.1에서 파티션을 확인하고 몇 년 동안 테이블을 분해하여 속도를 극적으로 증가시켜야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top