2013-07-20 2 views
0

복잡한 쿼리에서 ORDER BY가 포함 된 MySQL 쿼리의 속도를 지속적으로 향상 시키려고했습니다. 몇 가지 옵션을 다 써 버렸고 꽤 가까워졌습니다. 문제의 테이블에 의사 역 색인을 구현하는 최상의 솔루션을 찾았습니다.MySQL에서 반전 된 테이블 인덱스가 발견되지 않았습니다.

나는 기본적으로 (공동 인덱스를 사용하여 날짜를 게시 대신 ID를 사용하여 변화를 포함, 등)이 게시물에 대한 조언 에뮬레이션 : http://www.igvita.com/2007/08/20/pseudo-reverse-indexes-in-mysql/

를 성공적으로 그것을 채워, 여분의 열을 추가 인덱스를 추가 쿼리는

SELECT * FROM products USE INDEX (index_reverse_created); 

보이지 않습니다. 인덱스 이름 대신 임의의 단어 나 일반 열을 삽입하면 오류가 발생하므로 인덱스가 성공적으로 감지됩니다. * ... SELECT EXPLAIN 사용

추가 검사는, 그러나,이 보여

http://i44.tinypic.com/2aes304.png

특이한 부분 possible_keyskey 모두 (NULL)이다.

http://i41.tinypic.com/fvvdl1.png

을 그리고 그 지표의 건강한 세트처럼 보인다 : 제품의

SHOW 색인이를 얻을 수 있습니다.

전체적으로 나는 혼란 스럽습니다. 색인처럼 보이지만 실제로 사용하려고하면 뭔가 잘못됩니다.

답변

2

귀하의 검색어에 그룹 별 절이있는 경우 색인이 사용됩니다. 추가 쿼리없이 간단하고 간단한 쿼리를 작성 했으므로 mysql은 fullscan을 사용하고 결과적으로 데이터를 읽습니다.

+0

이 글을 읽은 후 나는 대략 facedesk 이었지만, where와 group by 절을 사용해도 역 색인은 작동하지 않는 것 같습니다. 내가 사용 쿼리 : SELECT ID, 제품의 USER_ID 사용 INDEX (index_reverse_created) WHERE ID

+0

역 색인의 구조는 무엇입니까? –

+0

구조가 정확히 무엇입니까? 다음 코드로 작성됩니다. ALTER TABLE products ADD INDEX index_reverse_created (reverse_created); 'reverse_created'는'created'의 timestampdiffs()로 채워진 컬럼입니다. –

관련 문제