>  Q&A  >  본문

WooCommerce 회원 쿼리 속도를 향상시키는 팁: MySQL 인덱스 최적화

<p>Teams for WooCommerce 멤버십 확장을 사용하여 WooCommerce 멤버십 기반 웹사이트를 운영하고 있습니다. 거대한 사용자 기반(70,000명 이상의 사용자)을 보유하고 있음에도 불구하고 95%의 시간 동안 매우 우수한 성능을 발휘합니다. 우리는 하루에 약 10,000명의 방문을 받고 있으며 응답 시간은 1초 미만입니다. </p> <p>사용자가 교육을 완료해야 하는 성수기에는 캐시되지 않은 동시 요청 로드로 인해 사이트가 중단될 수 있습니다. </p> <p>쿼리 모니터 도구를 사용하여 한 쿼리가 우리의 관심을 끌었습니다: 0.0375초(평균 0.0050초 미만). 이 검색어는 다음 사항을 확인합니다. </p> <올> <li><p>현재 사용자가 활성 구독을 보유한 팀의 구성원입니까? </p> </li> <li><p>이 기사를 볼 수 있는 권한이 있나요? </p> </li> </ol> <p>검색어 자체는 다음과 같습니다.</p> <pre class="brush:php;toolbar:false;">wp_posts를 선택하세요.* wp_posts에서 왼쪽 조인 wp_postmeta _teams_pm ON wp_posts.ID = _teams_pm.post_id AND _teams_pm.meta_key = '_member_id' 그리고 _teams_pm.meta_value = 2 왼쪽 조인 wp_usermeta_teams_um ON _teams_um.user_id = _teams_pm.meta_value AND _teams_um.meta_key = CONCAT( '_wc_memberships_for_teams_team_', wp_posts.ID, '_role' ) 여기서 1=1 AND ((wp_posts.post_type = 'wc_memberships_team' AND (wp_posts.post_status = '게시' 또는 wp_posts.post_status = 'acf-disabled' 또는 wp_posts.post_status = '비공개'))) AND (_teams_um.meta_value IN('매니저', '멤버') 또는 wp_posts.post_author = 2) ORDER BY wp_posts.post_date DESC</pre> <p>다음에 의해 호출됩니다:</p> <pre class="brush:php;toolbar:false;">"WP_Query->get_posts() wp-includes/class-wp-query.php:3111 WP_Query->query() wp-includes/class-wp-query.php:3542 WP_Query->__construct() wp-includes/class-wp-query.php:3653 SkyVergeWMTTeams_Handler->get_teams() wp-content/plugins/woocommerce-memberships-for-teams/src/Teams_Handler.php:446 wc_memberships_for_teams_get_teams() wp-content/plugins/woocommerce-memberships-for-teams/src/Functions/Teams.php:100 ctz_membership_get_user_team_id() wp-content/plugins/core-functionity/temp/wc_teams.php:603"</pre> <p>이 쿼리 속도를 높이는 방법에 대한 색인 생성에 대한 아이디어가 있는 사람이 있습니까? 저는 SQL에 익숙하지 않아 최적의 인덱스 배치가 어디에 있는지 알 수 없습니다. </p> <p>월요일에 ​​큰 폭의 급증이 예상되므로 사이트가 좀 더 조용해지는 이번 주말에 준비를 하시기 바랍니다.</p> <p>미리 감사드립니다! </p> <p>EDIT: 익명화된 설명, 접두사 및 데이터베이스 이름 출력: </p> <pre class="brush:php;toolbar:false;">+----+---------------+--------------- ---------+---------+--------- ---- ----+------+---------+------------ ---- ----------------+------+------- ---+- -------------------------------- ---+ | ID | 선택 가능 | 키 | 필터링 | +------+---------------+------------+--------------- -+- ----+---------+------ ------ ------+---------+--------------- ------- -------------+------+----------+------------ ------- -------------+ | 1 | 단순 | wp_posts | type_status_date | 100.00 | | 1 | _teams_pm | ref | PRIMARY | dbname.wp_posts.ID | | 1 | 단순 | _teams_key | PRIMARY | 100.00 | +------+---------------+------------+--------------- -+- ----+---------+------ ------ ------+---------+--------------- ------- -------------+------+----------+------------ ------- -------------+ 3개 행 세트, 4개 경고(0.00초)</pre> <p><br /></p>
P粉333186285P粉333186285421일 전567

모든 응답(1)나는 대답할 것이다

  • P粉155710425

    P粉1557104252023-08-27 09:51:24

    해당 플러그인은 일부 쿼리에 도움이 될 것입니다.

    도움이 될 수 있습니다wp_posts 으아악

    테이블에 여러 개의 인덱스가 있는 경우... 쿼리마다 다른 인덱스가 필요합니다. MySQL은 [드문 예외를 제외하고] 테이블 참조당 하나의 인덱스만 사용합니다. 쿼리에는 실제로 3개의 쿼리가 있습니다. 하나는 게시물용이고 두 개는 postmeta용입니다.

    제공자

    를 통해 무슨 일이 일어나고 있는지 파악하고 올리버의 질문에 더 잘 답변할 수 있습니다. EXPLAIN似乎不一致。请提供两个表的SHOW CREATE TABLE

    절 내 순서는 중요하지 않습니다. INDEX中的列的顺序很重要;在WHERE

    쿼리에는 문제가 있는 두 부분이 있습니다. 이를 피하면

    성능에 도움이 될 수 있습니다. : 으아악 CONCATOR。这是OR어떤 색인도 도움이 될 수 없습니다. 다만, 신청요건에 따라 개선이 불가능할 수도 있습니다.

    회신하다
    0
  • 취소회신하다