2014-05-01 4 views
2

나는 3 개의 칼럼과 2,300 만 개의 칼럼을 가진 테이블을 가지고있다. 각 단일 행에는 기본 키, int 값 및 "하나의 단일"단어가 포함됩니다. 각 단어의 길이는 3 자입니다. 즉, 각 단어의 "해시 표현"이있었습니다. 표 크기는 5GB였습니다. 이 테이블은 색인이 잘 붙어 있습니다.MySQL 쿼리 속도는 테이블 크기에 달려 있습니까?

이제 실제 단어가 포함 된 동일한 테이블을 만들겠습니다. 더 이상 3 자의 해시는 없습니다. 따라서 각 단어에는 정상적인 문자 수가 포함됩니다. 이제이 표에는 2,300 만 개의 행과 3 개의 열이 있습니다. 그러나 단어의 길이가 3 자의 해시보다 많기 때문에 표의 크기는 15GB입니다. 이 테이블은 색인이 잘 붙어 있습니다.

두 테이블의 유일한 차이점은 첫 번째 테이블에서 Hash의 데이터 형식이 char(3)입니다. 이제 두 번째 테이블에서 "non_hashed_word"의 데이터 유형은 varchar(20)입니다.

이제 내가 언급 한 이전 표에서 실행 한 아래 코드를 살펴보십시오. 이 코드는 0.01 초 실행됩니다.

SELECT `indexVal`, COUNT(`indexVal`) AS OverlapWords, `UniqueWordCount`, 
(COUNT(`indexVal`)/`UniqueWordCount`) AS SimScore FROM `key_word`WHERE `hashed_word` IN 
('001','01v','0ji','0k9','0vc','[email protected]','0%d','13#' ,'148' 
,'1e1','1sx','1v$','[email protected]','1?b','1?k','226','2kl','2ue','2*l','2?4','36h','3au','3us','4d~') 
GROUP BY (`indexVal`) LIMIT 500 

새 테이블에서도 동일한 코드를 실행할 것으로 예상됩니다.

내 질문에, 행의 개수와 열의 수가 같더라도 테이블 크기가 훨씬 더 크기 때문에 우리 쿼리를 사용할 수 있습니까? 아니면 데이터 유형이 varchar()일까요?

+0

요약하면 간단합니다. EXPLAIN을 사용하여 인덱스를 올바르게 실행했는지 확인하십시오. 또한 "filesort 사용"을 찾습니다. http://www.mysqlperformanceblog.com/2009/03/05/what-does-using-filesort-mean-in-mysql/ – bcmcfc

+0

두 번째 인덱스의 메모리가 충분하다면 테이블이 메모리에 맞게 또한 빠를 것입니다. (ish) – Mihai

+0

테이블이 잘 색인되어 있으므로 사용중인 것이 무엇이든간에 hashed_word/nonhashed_word라고 가정하면 색인이 생성됩니다. 내가 그걸 알게 해줘. 이 필드의 문자 크기와 테이블의 ibd 크기는 무엇이며 인덱스 크기는 무엇입니까? 제한 조건을 사용하려고하는 이유는 한계 조건이 없도록 조건을 계산하려고 할 때 여기에서 작동해서는 안되기 때문입니다. ... 한 번 제한 클론을 제거하고 필요한 세부 사항을 공유 할 수 있습니다. –

답변

-1

확실히 예. EXPLAIN을 사용하여 쿼리 계획을 가져옵니다. 또 다른 이유 :

  1. 제한은 처음 500 얻기 위해 설정 한 전체 결과를 가지고있다 -> 행을, 더 많은 데이터

    를 이
  2. 작업 (계산, /, 등이 ..)에 대해 실행해야

  3. 각 행
  4. 인덱스 이상의 행이

등 디스크에 단편화가 가능하면,이 크다 있으면

....

0,123,