>데이터 베이스 >MySQL 튜토리얼 >대규모 데이터 세트에 대한 MySQL 쿼리 실행 시간을 최적화하는 방법은 무엇입니까?

대규모 데이터 세트에 대한 MySQL 쿼리 실행 시간을 최적화하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-26 01:38:11826검색

How to Optimize MySQL Query Execution Time for Large Datasets?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.