mysql 성능 최적화 최대, 개수 최적화

黄舟
풀어 주다: 2017-02-27 11:48:00
원래의
2384명이 탐색했습니다.


참고: MySQL의 실행 계획을 보려면 SQL 문을 실행하기 전에 explain을 추가하세요.
데이터베이스: MySQL에서 공식적으로 제공하는 sakila 데이터베이스

최대 최적화:

예: 마지막 결제 시간 쿼리

 explain select max(payment_date) from payment \G;
로그인 후 복사
로그인 후 복사

mysql 성능 최적화 최대, 개수 최적화

쿼리 유형은 단순하고 인덱스를 사용하지 않으며 스캔 행 수가 10,000개 이상이며, 0.02초 소요

최적화 방법:

결제_날짜 열에 인덱스 생성

create index idx_paydate on payment(payment_date);
로그인 후 복사
로그인 후 복사

그런 다음 이 SQL 문을 실행하고 다음을 찾습니다.

mysql 성능 최적화 최대, 개수 최적화

이 실행 결과가 나오는 이유는 인덱스가 순차적으로 정렬되어 있기 때문에 인덱스를 통해 마지막 것이 무엇인지 바로 알 수 있다는 것입니다.

카운트 최적화

예를 들어 : 하나의 SQL 문에서 동시에 알아보세요. 2006년과 2007년의 영화 수는 각각 얼마입니까
틀린 방법:

select count(release_year = '2006' OR release_year = '2007') from film;
로그인 후 복사
로그인 후 복사

2006년과 2007년의 영화 수는 별도로 계산할 수 없습니다.

select count(*) from film where release_year = '2006' and release_year = '2007'
로그인 후 복사
로그인 후 복사

release_year는 2006년과 2007년이 동시에 될 수 없으므로 논리적으로 잘못된 것입니다

쿼리 최적화는 다음과 같습니다.

select count(release_year='2006' or null) as '2006年的电影数量',count(release_year='2007' or null) as '2007年的电影数量' from film;
로그인 후 복사
로그인 후 복사

는 SQL에서 다음의 실행 결과를 설명합니다. count(*)count(某列)은 경우에 따라 다를 수 있습니다. 왜냐하면 , count(*)에는 null이 포함되어 있고, 다른 하나가 null이면 계산되지 않기 때문입니다.
이 기능을 사용하면 2006년 이외의 연도는 null로 기록됩니다. 실행 결과는 아래 그림과 같습니다
mysql 성능 최적화 최대, 개수 최적화

참고: MySQL의 실행은 다음과 같이 볼 수 있습니다. SQL 문 실행 전 설명 추가
데이터베이스: MySQL에서 공식 제공하는 sakila 데이터베이스

최대 최적화:

예: 마지막 결제 시간 쿼리

 explain select max(payment_date) from payment \G;
로그인 후 복사
로그인 후 복사

mysql 성능 최적화 최대, 개수 최적화

쿼리 유형은 단순하고 인덱스를 사용하지 않으며 스캔 행 수는 10,000개 이상이며 0.02초가 걸립니다.

최적화 방법:

Payment_date 열에 인덱스를 생성합니다

create index idx_paydate on payment(payment_date);
로그인 후 복사
로그인 후 복사

그런 다음 이 SQL 문을 실행했을 때 다음을 발견했습니다.

mysql 성능 최적화 최대, 개수 최적화

이 실행 결과의 이유는 다음과 같습니다. 순서대로 정렬되어 있는데, 인덱스를 통해 마지막이 무엇인지 바로 알 수 있습니다

카운트 최적화

예: 하나의 SQL 문에서 2006년과 2007년의 영화 개수를 알아보세요
오류 방법:

select count(release_year = '2006' OR release_year = '2007') from film;
로그인 후 복사
로그인 후 복사

따로 계산할 수 없습니다. 2006년과 2007년의 영화 편수

select count(*) from film where release_year = '2006' and release_year = '2007'
로그인 후 복사
로그인 후 복사

release_year가 2006년과 2007년이 동시에 될 수 없으므로 논리가 잘못되었습니다

쿼리 최적화는 다음과 같습니다.

select count(release_year='2006' or null) as '2006年的电影数量',count(release_year='2007' or null) as '2007年的电影数量' from film;
로그인 후 복사
로그인 후 복사

설명 SQL에서는 count(*)에 null이 포함되어 있기 때문에 count(某列)count(*)의 실행 결과가 다를 때가 있습니다. 다른 하나는 null이므로 계산되지 않습니다.
이 기능을 사용하면 2006년이 아닌 연도는 null로 기록되고, 실행 결과는 아래 그림과 같습니다
mysql 성능 최적화 최대, 개수 최적화

위 내용은 max and mysql 성능 최적화 등 카운트 최적화 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿