집 >데이터 베이스 >MySQL 튜토리얼 >대규모 데이터 세트에 대한 MySQL 쿼리 실행 시간을 최적화하는 방법은 무엇입니까?
MySQL 쿼리 실행 시간 최적화
대규모 데이터베이스 작업 시 쿼리 실행 시간은 중요한 요소가 됩니다. 그러한 시나리오 중 하나에서는 100만 개의 레코드가 있는 웹 사이트 데이터베이스에서 쿼리 실행 시간이 너무 길어졌습니다. 아래 제시된 한 샘플 쿼리는 이 문제를 보여줍니다.
select * from `ratings` order by id limit 499500, 500
MySQL 테이블에서 백만 개의 레코드를 처리하면 문제가 발생하지 않을 것이라는 믿음에도 불구하고 이 쿼리를 실행하는 데 지속적으로 1분 이상이 걸렸습니다. id 열에 인덱스를 추가해도 이 문제는 완화되지 않았습니다.
그러나 이 쿼리에 대한 EXPLAIN 계획을 조사한 결과 쿼리가 전체 테이블 스캔 접근 방식을 사용하고 있는 것으로 나타났습니다.
explain select * from `ratings` order by id limit 499500, 500; +----+-------------+---------+------+---------------+------+---------+------+---------+----------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+---------+------+---------------+------+---------+------+---------+----------------+ | 1 | SIMPLE | ratings | ALL | NULL | NULL | NULL | NULL | 4718592 | Using filesort | +----+-------------+---------+------+---------------+------+---------+------+---------+----------------+
이 문제를 해결하기 위해 where 절을 활용하여 검색 기준을 좁히는 것이 제안되었습니다. where 절이 추가되면서 쿼리 계획이 변경되었습니다.
explain select * from `ratings` where id>=499501 limit 500; +----+-------------+---------+-------+---------------+---------+---------+------+---------+-----------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+---------+-------+---------------+---------+---------+------+---------+-----------------------+ | 1 | SIMPLE | ratings | range | PRIMARY | PRIMARY | 4 | NULL | 4198581 | Using index condition | +----+-------------+---------+-------+---------------+---------+---------+------+---------+-----------------------+
이 변경으로 인해 인덱스 조건 접근 방식을 사용하는 쿼리가 발생하여 실행 시간이 크게 향상되었습니다.
또한 쿼리 실행 프로세스의 교착 상태를 배제할 수 없습니다. 교착 상태를 진단하려면 SHOW INNODB STATUS 명령이 도움이 될 수 있습니다.
위 내용은 대규모 데이터 세트에 대한 MySQL 쿼리 실행 시간을 최적화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!