programing

MySQL 인덱싱은 PHP를 통해 속도 효과가 없지만 PHP MyAdmin에서는 효과가 있습니다.

abcjava 2023. 6. 30. 21:46
반응형

MySQL 인덱싱은 PHP를 통해 속도 효과가 없지만 PHP MyAdmin에서는 효과가 있습니다.

MariaDB MySQL 데이터베이스에서 약 2백만 개의 항목이 있는 테이블에 대한 간단한 SELECT 쿼리를 가속화하려고 합니다.필요한 열에 대한 인덱스를 만들 때까지 1.5초 이상 걸렸고, PphpMyAdmin을 통해 실행하면 속도가 크게 향상되었습니다(현재는 약 0.09초 소요).

문제는 제 PHP 서버(mysqli)를 통해 실행할 때 실행 시간이 전혀 변경되지 않는다는 것입니다.을 실행여실시기중입다니는록하간을행하▁my▁running▁by▁time▁i다를 실행하여 기록하고 microtime()쿼리 전후에 인덱스가 있는지 여부에 관계없이 쿼리를 실행하는 데 최대 1.5초가 소요됩니다(차이를 보려면 인덱스를 제거/읽기).

쿼리 예제:

SELECT `pair`, `price`, `time` FROM `live_prices` FORCE INDEX 
 (pairPriceTime) WHERE `time` = '2022-08-07 03:01:59';

인덱스 생성:

ALTER TABLE `live_prices` ADD INDEX pairPriceTime (pair, price, time);

이것에 대한 의견이 있습니까?PHP PDO는 인덱스를 무시합니까?서버가 새 인덱스가 있다는 것을 "인식"하려면 서버를 다시 시작해야 합니까? (공유 호스팅 서비스를 사용하고 있기 때문에 문제가 되는 것은...)

은 만그것정쿼면리라다,필합니요은그것말약이 필요합니다.INDEX 에서 테스트한 값부터 시작합니다.WHERE:

INDEX(time)

또는 "포함 색인"을 작성하려면:

INDEX(time, pair, price)

하지만, 당신의 대부분의 접근은 다음과 관련이 있을 것입니다.pair만약 그렇다면, 다른 쿼리들은 다음이 필요할 수도 있습니다.

INDEX(pair, time)

특히 만약 당신이 일정 시간 동안이라면.

다양한 옵션을 추가로 논의하기 위해 제공해 주십시오.EXPLAIN SELECT ...

PDO, mysqli, phpmyadmin -- 이것들은 모두 같은 방식으로 작동합니다. (가능한 예외는 암시적인 것을 처리합니다.)LIMIT에 있습니다 "myadmin".)

의 사용을 피하기 위해 노력합니다.FORCE INDEX오늘의 쿼리와 데이터 세트에 도움이 되는 것은 내일의 쿼리에 타격을 줄 수 있습니다.

타이밍에 이상이 나타나면 쿼리를 두 번 실행합니다.캐싱이 그 이유일 수 있습니다.

mysql 문서에는 다음과 같이 나와 있습니다.

FORCE INDEX 힌트는 USE INDEX(INDEX_list)와 같은 역할을 하며 테이블 스캔은 매우 비용이 많이 든다고 가정합니다.즉, 테이블 검색은 지정된 인덱스 중 하나를 사용하여 테이블에서 행을 찾을 수 없는 경우에만 사용됩니다.

여기 MariaDB 문서화 Force Index는 다음과 같이 말합니다.

FORCE INDEX는 주어진 인덱스(USE_INDEX와 같은)만 고려하여 작동하지만, 테이블 스캔을 매우 비싼 것으로 간주하도록 옵티마이저에 지시합니다.그러나 '강제' 인덱스를 사용할 수 없는 경우에는 테이블 스캔이 사용됩니다.

인덱스 사용은 필수 사항이 아닙니다.시간이라는 하나의 조건만 지정했으므로 가져오기에 다른 인덱스를 사용하도록 선택할 수 있습니다.나는 당신이 where 절의 선택에 다른 조건을 사용하거나 다음과 같이 주문을 추가할 것을 제안합니다.

order by  pair, price, time

저는 결국 다른 인덱스를 만들었습니다.timecolumn)을 사용하여 현재 ~0.002초의 속도로 실행됩니다.LIMIT 조항을 설정하는 것은 제가 항상 423 행(코인 쌍 423)을 받고 있었기 때문에 아무런 효과가 없었습니다.

결론적으로, 저는 아마도 더 구체적인 색인이 필요했을 것입니다. 비록 이상한 부분은 첫 번째 색인이 PMA에서는 잘 작동했지만 PHP를 통해서는 작동하지 않았지만, 이제 두 번째 색인이 두 가지 접근 방식에 모두 적용된다는 것입니다.

모두 친절한 답변 감사합니다 :)

언급URL : https://stackoverflow.com/questions/73264299/mysql-indexing-has-no-speed-effect-through-php-but-does-on-phpmyadmin

반응형