>  기사  >  데이터 베이스  >  mysql 인덱스가 적용되지 않는 문제 해결

mysql 인덱스가 적용되지 않는 문제 해결

一个新手
一个新手원래의
2017-09-30 10:33:131482검색

회사에서 서비스용으로 사용하는 mysql이 최근 쿼리할 때 속도가 너무 느려서 쿼리 실행 계획을 확인해 보니 인덱스가 적용되지 않는 경우가 많습니다.

스토리지 엔진은 InnoDB를 사용합니다.

처음 메인 데이터베이스에서 쿼리를 시작했을 때, 왜 인덱스가 적용되지 않는지 늘 궁금했는데, 스탠바이 데이터베이스로 전환한 후에 스탠바이 데이터베이스가 유효하다는 것을 알게 되었습니다.

인덱스에 문제가 있지는 않은지 고민하기 시작했는데, 인덱스를 재구축해 보니 효율이 훨씬 더 높다는 걸 알게 됐어요.

간단하게 비교를 기록해 보세요.


mysql> explain select * from runinfo where status in (0, 2, 1, 3, 4, 7, 9, 10);
+----+-------------+---------+-------+---------------+------+---------+------+----------+-------------+
| id | select_type | table   | type  | possible_keys | key  | key_len | ref  | rows     | Extra       |
+----+-------------+---------+-------+---------------+------+---------+------+----------+-------------+
|  1 | SIMPLE      | runinfo | All   | status_2      | NULL | NULL    | NULL |  2378055 | Using where |
+----+-------------+---------+-------+---------------+------+---------+------+----------+-------------+
row in set (0.00 sec)

위는 본관 실행계획입니다.

백업 데이터베이스의 실행 계획을 비교해보세요.


mysql> explain select * from runinfo where status in (0, 2, 1, 3, 4, 7, 9, 10);
+----+-------------+---------+-------+---------------+----------+---------+------+------+-------------+
| id | select_type | table   | type  | possible_keys | key      | key_len | ref  | rows | Extra       |
+----+-------------+---------+-------+---------------+----------+---------+------+------+-------------+
|  1 | SIMPLE      | runinfo | range | status_2      | status_2 | 4       | NULL |  116 | Using where |
+----+-------------+---------+-------+---------------+----------+---------+------+------+-------------+
row in set (0.00 sec)

쿼리 중에 대기 데이터베이스가 인덱스 status_2에 적응하는 것을 볼 수 있습니다.

다음 명령을 실행하면 문제가 해결됩니다.


mysql> OPTIMIZE TABLE runinfo;
+------------------+----------+----------+-------------------------------------------------------------------+
| Table            | Op       | Msg_type | Msg_text                                                          |
+------------------+----------+----------+-------------------------------------------------------------------+
| schedule.runinfo | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
| schedule.runinfo | optimize | status   | OK                                                                |
+------------------+----------+----------+-------------------------------------------------------------------+
rows in set (47.13 sec)

다음날 보니 쿼리 속도가 다시 느려졌는데, 새로운 데이터가 기록되고 인덱스가 업데이트되지 않는지 조금 궁금했습니다.

위 내용은 mysql 인덱스가 적용되지 않는 문제 해결의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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