찾다

 >  Q&A  >  본문

php - MYSQL 인덱스 최적화의 고전적인 문제,

질문은 다음과 같습니다:

< /p>

이렇게

< /p>

테이블 구조는 다음과 같습니다:

CREATE TABLE `lmx_app_category`(
  `id` int(11) NOT NULL DEFAULT '0' COMMENT '범주 번호',
  `pid`tinyint(4) NOT NULL DEFAULT '1' COMMENT '분류 유형(현재 2:1:어플리케이션, 2:게임)',
  `name` varchar(50) NOT NULL COMMENT '범주 이름',
  기본 키(`cat_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='애플리케이션 분류 테이블';

테이블 생성 `lmx_apps`(
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '앱 번호',
  `cat_id` int(11) NOT NULL DEFAULT '0' COMMENT '범주 번호',
  `name` varchar(100) NOT NULL COMMENT '앱 이름',
  `연도` char(5) NOT NULL DEFAULT '0' COMMENT '연도',
  `down_count` bigint(20) NOT NULL DEFAULT '0' COMMENT '다운로드',
  `hit_count` bigint(20) DEFAULT '0' COMMENT '검색량',
  기본 키(`id`),
) 엔진=InnoDB AUTO_INCREMENT=1 기본 CHARSET=utf8;


이제 두 개의 공동 색인을 만들었습니다:

< /p>

그런데 이 두 색인에는 몇 가지 문제가 있습니다. 모두 검색을 클릭하면 정렬이 색인화되지 않습니다. 카테고리 검색 시 색인화하지 않고 모두 선택하는 문제를 해결하려면 어떻게 해야 합니까?

인덱싱을 위한 SQL은 다음과 같습니다.

<코드> -- 설명
 SELECT a.id,a.cat_id,a.`name`,a.down_count,b.`name` FROM `lmx_apps` a

 내부 조인 `lmx_app_category` `b`
 
 ON `a`.`cat_id`=`b`.`id`

  어디
   a.cat_id = 103
    

   a.down_count DESC로 주문
    
 제한 10,20
 
 

인덱싱을 하지 않은 SQL은 다음과 같습니다

 SELECT a.id,a.cat_id,a.`name`,a.down_count,b.`name` FROM `lmx_apps` a

 내부 조인 `lmx_app_category` `b`
 
 ON `a`.`cat_id`=`b`.`id`

  -- 어디
  -- a.cat_id IN (lmx_app_category WHERE orgame = 1에서 cat_id 선택)
  -- cat_id 조건이 없거나 조건이 다음과 같은 경우

 a.down_count DESC로 주문
    
 제한 10,20
某草草某草草2781일 전574

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

  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-16 13:09:33

    이제 또 다른 계획이 생각나는데, 바로

    애플리케이션 테이블의 cat_id 필드와 cat_id가 생성한 인덱스를 삭제하세요

    분류 테이블(lmx_app_category)과 애플리케이션 테이블(lmx_apps) 간의 관계 테이블을 생성합니다.

    필드는 id, app_id, cat_id입니다

    이 관련 테이블에 인덱스를 생성하세요. 이 솔루션이 어떤 것인지 모르겠습니다

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