MySQL에서 빠른 페이지 검색, 색인 사용?
-
03-07-2019 - |
문제
아래 패턴을 따르는 데이터 페이지를 기본적으로 검색하는 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이 수행하는 일과 어떤 종류의 스캔이 수행되는지에 대한 정보를 보여줍니다.
다른 팁
아마도 많은 것이 있기 때문에 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에서 파티션을 확인하고 몇 년 동안 테이블을 분해하여 속도를 극적으로 증가시켜야합니다.
제휴하지 않습니다 StackOverflow