꽤 큰 MySQL 데이터베이스에 대한 일반적인 접근 방식과 관련된 질문이 있습니다. 데이터베이스와 상호 작용할 수있는 PHP 코드를 만들었습니다. 나는 엄청난 양의 데이터 (~ 130k 행, 200 열)를 분석하려고 시도하고 있으며 그렇게하기 위해 여러 가지 방법으로 놀고있다. 나는 그 길을 따라 많은 것을 배우고 있었고, 마치 내가 이 될 수 있도록 준비가되어있는 것처럼 느껴졌지 만 여전히 조금 붙어 있습니다.큰 MySQL 데이터베이스 조직에 접근하는 가장 좋은 방법은 무엇입니까?
나는 '엑셀'사고 방식으로 단단히 시작했습니다. 통계 분석을 위해 다양한 비트와 조각을 선택하려고 했으므로 계속해서 데이터 세트에 더 많은 열을 추가했습니다. 내가 만든 PHP/MySQL 스크립트 중 일부는 몇 시간이 걸렸습니다.
그런 다음 최소한 기본 작업으로 조인에 대해 배웠습니다. 이것은 내가 추측 한 약간의 계시 였지만, 결과적으로 조인이 제 데이터로 훌륭하게 재생되도록 모든 것을 다시 쓰게되었습니다. 최종 결과는 성능이 크게 향상되었습니다. 지금까지 약 15 초 정도 걸렸습니다.
몇 명의 사람들과 채팅을 한 후에, 나는 그것을 더 빨리 만들 수 있다고 결론을 내렸다. 내가 설정 한 방식은 다른 데이터 샘플이 각각 다른 테이블에 포함되도록하는 것이 었습니다. 각 테이블에는 조인의 일부로 사용 된 추가 테이블에 요약 된 데이터가 있습니다. 특정 데이터 세트에 대한 일반 정보는이 보조 테이블에 저장되어있어 액세스가 쉽고 속도가 빨라졌습니다.
지금 내가 가진 질문은 다음과 같습니다. 데이터베이스와 응용 프로그램의 작동 방식을 변경하여 이러한 다양한 데이터 샘플을 하나의 큰 테이블로 결합하는 것이 더 좋을까요? 지금까지 조금 실험 해 왔지만 현재 사용하고있는 방법보다 빠르지는 않습니다.
다른 말로하면 다중 테이블 조인과 관련된 단일 쿼리가 아닌 다중 테이블 조인을 포함한 많은 '작은'쿼리를 실행하는 것이 더 낫습니까? 나는 쿼리의 실행 시간을 검사 해왔고 조인이이 새로운 메서드에 대한 속도 저하를 유발하는 것처럼 보입니다.
PHP에서 MySQL로 반복적으로 작은 쿼리를 보내는 것이 단일 쿼리를 보내는 것보다 덜 바람직하다는 느낌을 받았지만, 그렇지 않은 경우 더 복잡한 쿼리를위한 전환점이 있습니까? 내가 그 시점에 도달 한 것처럼 보입니까?
글쎄요, 사용하는 스토리지 엔진과 테이블 색인 방법에 따라 다릅니다. 방정식에는 두 가지 측면이 있습니다. 1. 사용중인 실제 스키마와 2. 발급 한 각 쿼리. 두 가지 모두 최적화 할 수 있습니다. – prodigitalson
좋습니다. 알아두면 좋습니다. 이러한 다양한 데이터 샘플의 주된 문제점은 데이터를 정규화하는 쉬운 방법이 없다는 것입니다. 각 행이 완전히 고유하기 때문입니다.현재이 쿼리는 고유 한 행 ID (기본 키)와 SELECT 쿼리의 일부로 정기적으로 사용되는 3-4 개의 인덱스 열 집합으로 인덱싱됩니다. 그러나, 심지어 순간에 업데이 트가 시간이 오래 걸릴 것으로 보인다 - 대형 테이블 대신 속도를 개선하기 위해 대신 SELECT INTO를 사용하는 것이 좋습니다? – vize