해당 쿼리 최적화는 모든 데이터베이스에서 피할 수 없는 주제를 잘 알려져 있습니다. 데이터베이스 엔지니어에 대 한 최적화는 가장 어려운 일 이다. MySQL 오픈 소스 데이터베이스는 예외입니다. 사실, 저자는 데이터베이스 최적화 우리가 고통을 상상 만큼은 믿고 있다. 정상적인 상황에서 MySQL 데이터베이스 쿼리 최적화에 좋은 일을 할 다음과 같은 4 개의 세부 정보에서 시작할 수 있습니다.
첫째, 설명 키워드를 사용 하 여 쿼리 문에서 결함을 평가 하
다음 그림에서 알 수 있듯이, 저자는 쿼리는 테이블에서 모든 정보를 데이터베이스에 간단한 선택 쿼리를 지금 실행 합니다. 이제 데이터베이스 관리자는 데이터베이스는이 문을 실행 하는 경우 또는 추가 수 쿼리 최적화 하려고 합니다. 이 정보를 알고 싶은 경우 쿼리를 설명 키워드를 추가할 수 있습니다.
선택 쿼리 문을 사용 하면 데이터를 쿼리 하는 데이터베이스에서 테이블에서. 하지만 얼마나 효율적이 정책의 실행은? 최적화를 위한 공간 인가요? 콘텐츠는 위의 간단한 쿼리 문에서 사용할 수 없습니다. 더 자세한 정보를 얻으려면 설명 키워드를 추가 해야 합니다. 다음 그림과에서 같이:
설명 키워드를 추가한 후 시스템 테이블에서 데이터를 쿼리하지 않습니다 하지만 쿼리 하는 동안 몇 가지 정보를 표시 합니다. 이 정보는 우리의 후속 데이터베이스 쿼리 최적화에 도움이 매우 된다. 위의 정보에서 사용자가 그냥 간단한 쿼리를 볼 수 있습니다 우리가. 이 쿼리에서 인덱스, 키워드 등을 사용 하 고 조건문 사용 되지 않습니다. 이 쿼리 문은 매우 합리적입니다. 그것은 마지막과 정확한 결과 찾을 수 있습니다, 있지만 쿼리 효율성 분명 하지 않을 수 있습니다. 이 데이터베이스 전문가 위에 표시 된 정보에 따라 최적화할 수 있습니다. 어떻게 우리가 지금 where를 추가 하는 경우 쿼리 문 문을? 다음 그림 쇼.
이 시점에서 마지막 추가 필드에 표시 됩니다 where 문을 이미 사용 중에서입니다. 데이터베이스 최적화 결과에 null 필드 또는 빈 콘텐츠 분야에 필요 합니다. 이 장소는 종종 우리의 최적화의 초점 이다. 위의 그림에서와 같이, 우리는 쿼리의 효율성을 개선 하기 위해 테이블에 키워드 또는 인덱스를 설정 하 여이 SELECT 문의 최적화할 수 있습니다.
둘째, 쿼리 효율성을 개선 하기 위해 데이터 비교에 같은 유형의 열을 사용
데이터 쿼리에서 가끔 조건문을 기준을 추가합니다. 지금 두 개의 테이블이 있는 경우: 사용자 프로필 테이블 및 사용자 권한 테이블 사용자 수로 연결. 이제 각 사용자에 대 한 쿼리 권한, 쿼리를 쿼리 조건으로 사용자 수에 의해이 시점에서의 어떤 종류를 해야 합니다. 이제 char 형식의 사용자 프로필 테이블에 사용자 ID는 사용자 번호는 사용자 권한 테이블에 varchar 유형 인지 가정. 둘 다 이러한 데이터 유형은 문자, 하지만 그들은 같은 종류 되지 않습니다. 지금의이 테이블에 쿼리 효율성 무엇입니까? 확인 하려면 우선은 비록 그들은 문자 데이터의 종류, 그들은 단지 서로 호환. 결국, 여전히 올바른 결과 얻을 수 있습니다. 이 염두에서에 두고, 우리는 우리가 쿼리를 최적화할 수 있는지 고려 합니다.
다시 생각 합시다. 두 테이블에 대 한 사용자의 번호의 데이터 유형은 지금 char입니다. 결과 동일한 두 테이블은 쿼리에 연결, 지금은? 우리 테스트의 결과 그 쿼리 결과 동일 하지만, 소비 하는 시간은 다르다. 그리고 데이터 증가 금액으로 쿼리의 두 될 것입니다 점점 더 많은 시간 떨어져. 당신이 볼 수 있듯이 여기에서 두 개의 쿼리 문은 동일 하지만, 그들의 질문 더 효율적입니다.
MySQL 데이터베이스에 있지만 호환 되는 데이터 형식을 서로 비교할 수 있습니다. 그러나, 쿼리 효율성을 영향을 받을 것 이다. 데이터베이스 쿼리의 효율 향상의 관점에서 저자 쿼리 조건문에서 동일한 유형으로 열을 비교 하는 것을 제안 합니다. 동일한 조건 하에서 동일한 열 형식을 열의 다른 유형 보다 더 나은 성능을 제공할 수 있습니다. 이것은 특히 데이터베이스에 중요 데이터의 볼륨은 더 높은입니다.
그러나,이 최적화는 데이터 시트의 열 형식이 포함 됩니다. 이 데이터 시트를 설계할 때 고려 되어야 한다. 위의 경우에 대 한 우리 두 테이블에 특별히 사용자 ID 열을 설정할 수 있습니다. 정수 형식의 시퀀스 번호가 자동으로 시스템을 사용할 수 있습니다. 사용자 ID 열 다음 쿼리를 통해 보다 원래 사용자 번호 열을 통해 비교 하는 데 사용 됩니다. 반면, 쿼리 운영을 더 효율적입니다.
셋째, 주의와 같은 키워드의 시작 부분에 와일드 카드 문자를 사용 하 여
실제 작업에서 데이터베이스 관리자의 많은 나쁜 습관을가지고 하는 것이 나타났습니다. 같은 같은 키워드를 사용 하는 경우 와일드 카드는 임의로 사용할 수 있습니다. 예를 들어 사용자는 이제 "표정" 접두사를 가진 모든 제품 정보를 찾기 위해 필요 합니다. 쿼리에서 사용자 것 이다 습관적으로를 사용 하 여 다음 문을 쿼리: "% 봐 %." 같은 모습으로 시작 하는 제품 정보에 대 한 쿼리 대신이 조건문은 모든 이름 이름에는 단어의 레코드에 대 한 쿼리 합니다.
비록 최종 결과 동일 수 있습니다. 하지만 두 쿼리 효율성 다르다. 사실, 이것은 클라이언트 응용 프로그램의 부적 절 한 디자인 때문에 크게입니다. 클라이언트 응용 프로그램을 설계 하는 경우 시스템이 기본적으로 % 기호를 표시 합니다. 마찬가지로 다음 그림에 나와 있습니다.
그래서 디자인은 시스템 퍼지 쿼리를 지원할 수 있도록 좋은. 하지만 실제 작업에 사용자는 문제를 가질 수 있습니다. 사용자 쿼리에 % 단어 보기를 입력 하지 않으면 % 후 단어 보기를 입력 합니다. 때문에, 쿼리할 때 커서 % 번호 뒤에 자동으로 배치 됩니다. 일반적으로, 사용자는 입력할 때 커서의 위치를 조정 되지 않습니다. 이 시점에서 위에서 언급 한 상황 이다.
이런 이유로, 그 당신은 매우 신중 해야 같은 키워드 처럼 후 와일드 카드 문자를 사용 해야 하는 경우 것을 권해 드립니다. 많은 양의 데이터에서 레코드를 조회할 때에 특히 와일드 카드 위치 장소에 있어야 합니다. 다른 와일드 카드 문자로 시작할 수 있습니다 때 와일드 카드를 사용 하지 않으려고.
가능한 다른 형태를 사용 하 여 LIKE 키워드 대신
위의 LIKE 키워드를 사용 하는 경우 와일드 카드 문자의 위치에 대 한 관심을 지불 하는 필요를 언급 했다. 사실, 쿼리 효율성에서 우리 뿐만 아니라 필요가 와일드 카드의 위치에 주의 하 고 LIKE 키워드 베스트 하지 사용 하지 않을 수 있습니다. 사실, SQL 문에서 LIKE 키워드를 대체 하는 다른 방법을 사용할 수 있습니다. 지금 제품 테이블을 있다, 그 번호는 6 자리. 이제 9로 시작 하는 제품 번호를 쿼리 하는 데 해야 합니다. 작업 이란 무엇입니까?
하나 "%9" 같은 LIKE 키워드를 사용 하는. 와일드 카드 문자의 위치를 확인 합니다. 이 조건문은 원하는 결과 찾을 수 있습니다. 그러나 성능 최적화의 관점에서이 문장은 하지 않습니다 처리 하는 좋은 방법. 우리가 할 수 있는 몇 가지 방법으로.
두 번째 기호를 비교 하 여 얻을 수 있다. 이 값을 사용 하 여 달성 될 수 있다 > = 900000 및 값 < 999999 =. 두 쿼리의 결과 동일 하지만. 하지만 쿼리 시간 보다이 같은 기호 훨씬 짧습니다.