회사에서 서비스용으로 사용하는 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에 적응하는 것을 볼 수 있습니다.
다음 명령을 실행하면 문제가 해결됩니다.
rreee
위 내용은 MySQL 인덱스가 적용되지 않는 솔루션의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!