아주 많은 양의 원시 데이터로 채워질 데이터베이스를 MySQL에서 디자인하고 있습니다. 데이터를 삽입하기 전에 인덱스를 정의해야한다는 것을 알고 싶습니다. 아니면 먼저 데이터를 삽입 한 다음 인덱스를 만들어야합니까? 어떤 차이가 있습니까? 또한 알고 싶습니다. 2 열의 인덱스를 갖고 싶다면 별도로 또는 함께 인덱싱하는 것이 더 좋습니까? 감사합니다.MySql의 인덱스 생성 시간
답변
대량로드를 수행하는 경우, 제 생각에는 인덱스를 앞에 붙이지 않는 것이 좋습니다. 인덱스 페이지를 지속적으로 쓰도록로드가 느려지 며, 특히 큰 데이터 세트 인 경우 더욱 그렇습니다. 즉, 테이블이 채워진 후 SINGLE 문을 사용하여 하나씩 대신 모든 인덱스를 작성하십시오. 나는 오래 전에 어려운 길을 배웠다. 14 백만 행의 표가 있었고 15 개 이상의 색인을 작성해야했습니다. 각 지수는 마지막 지수보다 더 길어졌습니다. 새로운 색인이 나타날 때마다 이전의 페이지를 다시 작성해야했습니다. 한 번에 모두 그렇게하는 것이 훨씬 더 나은 것으로 판명되었습니다.
여러 열 인덱스의 경우 ... 쿼리가 수행되는 방식에 따라 다릅니다. 많은 쿼리가 WHERE 조건에서 한 쌍 이상의 열을 사용할 경우 예, 단일 인덱스에서 여러 열을 사용하십시오. 또한
먼저 데이터를 입력하십시오.
만약 두 개의 컬럼에 인덱스, 콤보 검색 또는 개인은 (정상 CIRC에서) 어느 것이 같이idx_a (fldA + FLDB) idx_b (FLDB)
관련, // t
일반적으로 대량의 데이터 삽입 작업을 수행하는 경우 데이터를 삽입 할 때 색인을 유지하고 다시 작성할 필요가 없으므로 삽입 프로세스의 속도가 빨라집니다.
인덱싱 전략은 데이터베이스 쿼리 방법에 전적으로 달려 있습니다. 집합으로 질의하거나 (예 : where 절을 함께 사용) 또는 개인 (즉, where 절에서 하나 또는 다른 집합을 가짐)으로 쿼리 할 것입니까?
I 싶어이 2 열에 인덱스가있는 경우 내가 알고 싶어, 그것은 그들을 개별적으로 또는 함께 인덱스에 더 나은 무엇입니까?
이것은 검색어에 따라 다릅니다. 인덱스 (colA, colB)가있을 때 데이터베이스는 쿼리의 WHERE 조건에서 colA를 사용하지 않을 때이 인덱스를 사용할 수 없습니다. WHERE colB = ?
쿼리가있는 경우이 열로 시작하는 인덱스가 필요합니다. 인덱스의 열 순서 변경하는 경우 ...
WHERE colB = ?;
을 :하지만
index (colB, colA); -- different order
WHERE colb = ?; -- can use the index
WHERE colA = ? AND colB = ?; -- can use the index
을 그리고 지금이 사람이 사용할 수 없습니다
index (colA, colB);
WHERE colA = ?; -- can use the index
WHERE colA = ? AND colB = ?; -- can use the index
이 하나가 실패합니다 색인 :
WHERE colA = ?;
검색어를 확인하려면을 사용하십시오.그리고 꼭 필요한 인덱스 만 생성하십시오.
어디 colA =? 및 colB =?; - 인덱스 (colB, colA)를 사용하지 않는 인덱스 <-를 사용할 수 있습니다. 인덱스가 필요합니다 (colA, colB) – judda
@judda : WHERE colA =? 및 colB =?; 정확히 어디 colB = 동일합니까? 및 colA =?; MySQL이 양쪽 모두에 인덱스를 사용할 수 없다면, 최적화 프로그램에 심각한 버그가 있습니다. 설명하면 알 수 있습니다. –
일부 옵티 마이저의 경우 두 방법 모두 다르게 취급되므로 두 방법을 모두 인덱싱해야한다는 것을 알고 있습니다. mysql에 대해서는 100 % 확실하지 않습니다. 옵티마이 저는 필요에 따라 주위를 스왑 할 수 있지만 그렇지 않을 수 있습니다. http://explainextended.com/2010/05/19/things-sql-needs-determining-range-cardinality/는 인덱스에 대한 의사 관련 설명이며 이들이 mysql에서 어떻게 작동 하는지를 설명합니다. – judda
- 1. MySQL의 인덱스 크기
- 2. MySQL의 고유 키와 인덱스
- 3. 디스플레이 시간 인덱스 (Rxts)
- 4. mysql의 고유 필드에 인덱스 이름을 지정하는 방법
- 5. 시간대가있는 MySQL의 날짜 시간
- 6. MySQL의 지금() PHP 시간()?
- 7. MySQL의 날짜 시간
- 8. mysql의 특정 행에 대해서만 인덱스 만들기
- 9. MySQL 인덱스 생성
- 10. Linq에서 인덱스 생성
- 11. MySQL 인덱스 생성 속도가 느립니다 (EC2에서).
- 12. MySQL의 스키마 생성 NHibernate에
- 13. SQL 시간 초과 및 인덱스
- 14. PHP/MySQL의 날짜/시간 차이
- 15. PHP/MySQL의 파일 다운로드 시간 :
- 16. 시간 복잡도/MySQL의 성능 분석
- 17. MySQL의 인덱스, 멀티 컬럼 또는 하나에 대해?
- 18. JavaHelp 인덱스 파일 자동 생성
- 19. Haystack/Whoosh 인덱스 생성 오류
- 20. 인덱스 구성 테이블 생성 문제
- 21. MySQL의 datetime 필드에서 특정 날짜 시간 선택
- 22. 사이트에 데이터베이스 생성 시간
- 23. 디렉토리의 생성 시간 설정
- 24. 장고 템플릿 생성 시간
- 25. 자바에서 UTC 시간 생성
- 26. HWND 생성 시간
- 27. html로 시간 생성 이벤트
- 28. Innodb 테이블의 생성 시간
- 29. MySQL, 인덱스 및 "대기 대기 시간 초과"
- 30. MySQL의 쿼리 시간 - 쿼리 캐시 문제 내가
만약 내가 함께 색인을 만들고 한번 따로 따로 = 3 개의 색인을 가지고 있다면 그것은 나쁘고 높은 오버 헤드가 될까요? – Hossein
실제로는 개별적으로 쿼리하지 않을 경우 불필요한 오버 헤드 일뿐입니다. – judda