2011-03-08 3 views
0

내 검색어가 날짜와 숫자 키 범위에서 선택됩니다.이 문제를 개선 할 수 있을지 잘 모르겠습니다 만 물어볼 것입니다. 나는 속도를 향상시키기를 바라고있다. 실제로 MySql, 인덱스가 맞는지 또는 쿼리 속도를 향상시킬 수 있는지 확실하지 않습니다.

SELECT count(Pads.PadID) AS CountOfPadID FROM Pads WHERE ((RemoveMeDate= 
'2001-01-01 00:00:00') AND (catid between 0 and 11)) 
ORDER BY VersionAddDate DESC; 

SELECT PadID, CatID, IconSoureURL, OsStr, ProgramName, PageName, ProgramVersion, 
left(English450,650) as English450, English45, ProgHomeURL, DownloadURL, License, 
ReleaseStatus FROM Pads WHERE RemoveMeDate='2001-01-01 00:00:00' AND catid 
between 0 and 11 ORDER BY VersionAddDate DESC LIMIT 0,20; 

예 범위를 변경할 수있는 한계와 기록을 얻기 위해 두 개의 매우 유사한 쿼리, 하나는 계산을하고 하나를 실행 해요

, 그것은 100 (111)에

첫 번째 쿼리는 0.6 초가 걸리며 두 번째 쿼리는 SQL_NO_CACHE를 사용하여도 매우 빠릅니다.

첫 번째 쿼리의 설명 결과를 분석합니다. enter image description here

Heres는 내 현재 인덱스 enter image description here

+0

'RemoveMeDatw'단일 열에서 색인 'RemoveMeDate'를 제거 할 수 있습니다.이 색인은 RemoveMeDate로 시작하는 다른 색인으로 덮어 씁니다. –

답변

0

쿼리는 동일한 데이터를 반환 모두 는 다른 순서 일 수도있다. 하지만 그들은 디스크/테이블 공간에 동일한 데이터를 건 드리거나 동일한 인덱스 일 수 있습니다 (쿼리 2에 대해 설명해주십시오). 첫 번째 쿼리는 실제로 캐시를 데우고 메모리에 데이터를 가져 오므로 두 번째 쿼리는 빠릅니다.

우리는 더 빨리 만들 수 있습니까? 아마도 매우 빠릅니다. 이미 3 개의 레코드 만 찾고 있으므로 인덱스가 완벽합니다. 초기 쿼리는 콜드 캐시/버퍼 풀에서 수행되었을 수 있습니다. 다음 번에 벤치마킹을하는 동안 몇 가지 무작위 쿼리를 실행하여 캐시를 먼저 따뜻하게하고 확인하십시오.

@ The-Scrum-Meister가 제안한대로 인덱스 RemoveMeDate을 제거하면 삽입 속도가 빨라지고 현재 사용되는 경우 메모리에 대한 부담이 줄어 듭니다.

사용 가능한 하드웨어를 최대한 활용하고 서버를 빠르게 사용하려면 서버/스토리지 엔진 자체를 조정해야하는지 확인하십시오.

관련 문제