MySQL 데이터베이스의 특정 테이블 연결 쿼리가 매우 느립니다. 최적화하는 방법은 무엇입니까?
두 테이블 간의 연결 쿼리는 매우 느리지만, 한 테이블만 쿼리하면 매우 빠르거나, 다른 테이블의 연결 쿼리도 매우 빠릅니다.
쿼리문(쿼리시간 약 0.5초) :
<code>SELECT * FROM member m LEFT JOIN gift g ON g.mid = m.id WHERE m.status = 0 AND m.wid = 236 ORDER BY m.id DESC LIMIT 0,20</code>
멤버 테이블 구조(약 40,000개 데이터):
<code>CREATE TABLE `member` ( `id` int(11) NOT NULL AUTO_INCREMENT, `wid` int(11) NOT NULL, `wxid` varchar(30) DEFAULT NULL, `wid_wxid` varchar(30) DEFAULT NULL, `cpai` varchar(32) NOT NULL, `name` varchar(20) DEFAULT NULL, `sex` varchar(10) DEFAULT NULL, `tel` varchar(11) DEFAULT NULL, `lxtel` varchar(11) DEFAULT NULL, `xingge` varchar(10) DEFAULT NULL, `qq` int(11) DEFAULT NULL, `birthday` varchar(12) DEFAULT NULL, `cartype` varchar(20) DEFAULT NULL, `carclass` varchar(20) DEFAULT NULL, `bxtime` varchar(20) DEFAULT '0.00', `next_bxtime` varchar(20) DEFAULT '0.00', `bytime` varchar(20) DEFAULT '0.00', `next_bytime` varchar(20) DEFAULT '0.00', `bylong` varchar(20) DEFAULT '0.00', `next_bylong` varchar(20) DEFAULT '0.00', `engine` varchar(50) DEFAULT NULL, `chejia` varchar(50) DEFAULT NULL, `danganhao` varchar(30) DEFAULT NULL, `buy_date` varchar(20) DEFAULT NULL, `first_date` varchar(20) DEFAULT NULL, `weixiu_times` tinyint(4) DEFAULT NULL, `weixiu_money` decimal(8,2) DEFAULT NULL, `last_date` varchar(20) DEFAULT NULL, `last_jieche` varchar(50) DEFAULT NULL, `cpai_register` varchar(20) DEFAULT NULL, `identify_number` varchar(20) DEFAULT NULL, `order_number` varchar(20) DEFAULT NULL, `sale_date` varchar(20) DEFAULT NULL, `carkilometre` int(11) DEFAULT '0', `address` varchar(32) DEFAULT NULL, `remark` varchar(32) DEFAULT NULL, `is_check` int(11) DEFAULT '0', `password` char(6) DEFAULT NULL, `salt` char(32) DEFAULT NULL, `pay_password` char(32) DEFAULT NULL, `pay_salt` char(6) DEFAULT NULL, `status` tinyint(4) DEFAULT '0', `time` varchar(24) NOT NULL, `headimgurl` varchar(200) DEFAULT NULL, `nickname` varchar(32) DEFAULT NULL, `isattention` tinyint(4) DEFAULT '0', `paid_price` decimal(8,2) DEFAULT '0.00', `source` int(11) DEFAULT NULL, `add_date` datetime DEFAULT NULL, `add_by` varchar(30) DEFAULT '', `update_date` datetime DEFAULT NULL, `update_by` varchar(30) DEFAULT '', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=59151 DEFAULT CHARSET=utf8; </code>
선물 테이블 구조(약 4000개 데이터):
<code>CREATE TABLE `member_giftamount` ( `id` int(16) NOT NULL AUTO_INCREMENT, `wid` int(32) NOT NULL, `mid` int(11) NOT NULL, `auth_wid` int(11) DEFAULT NULL, `wxid` varchar(64) DEFAULT NULL, `tel` varchar(30) DEFAULT NULL, `amount` decimal(8,2) DEFAULT '0.00', `gift_amount` decimal(8,2) DEFAULT '0.00', `refund_amount` decimal(8,2) DEFAULT '0.00', `credits` int(11) DEFAULT '0', `total` decimal(8,2) DEFAULT '0.00', `market_total` decimal(8,2) DEFAULT '0.00', `wid_wxid` varchar(64) DEFAULT NULL, `wait_total` decimal(8,2) DEFAULT '0.00', `add_date` datetime DEFAULT NULL, `add_by` varchar(30) DEFAULT NULL, `update_date` datetime DEFAULT NULL, `update_by` varchar(30) DEFAULT NULL, `sign_days` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=4254 DEFAULT CHARSET=utf8; </code>
답글 내용:
두 테이블 간의 연결 쿼리는 매우 느리지만, 한 테이블만 쿼리하면 매우 빠르거나, 다른 테이블의 연결 쿼리도 매우 빠릅니다.
쿼리문(쿼리시간 약 0.5초) :
<code>SELECT * FROM member m LEFT JOIN gift g ON g.mid = m.id WHERE m.status = 0 AND m.wid = 236 ORDER BY m.id DESC LIMIT 0,20</code>
멤버 테이블 구조(약 40,000개 데이터):
<code>CREATE TABLE `member` ( `id` int(11) NOT NULL AUTO_INCREMENT, `wid` int(11) NOT NULL, `wxid` varchar(30) DEFAULT NULL, `wid_wxid` varchar(30) DEFAULT NULL, `cpai` varchar(32) NOT NULL, `name` varchar(20) DEFAULT NULL, `sex` varchar(10) DEFAULT NULL, `tel` varchar(11) DEFAULT NULL, `lxtel` varchar(11) DEFAULT NULL, `xingge` varchar(10) DEFAULT NULL, `qq` int(11) DEFAULT NULL, `birthday` varchar(12) DEFAULT NULL, `cartype` varchar(20) DEFAULT NULL, `carclass` varchar(20) DEFAULT NULL, `bxtime` varchar(20) DEFAULT '0.00', `next_bxtime` varchar(20) DEFAULT '0.00', `bytime` varchar(20) DEFAULT '0.00', `next_bytime` varchar(20) DEFAULT '0.00', `bylong` varchar(20) DEFAULT '0.00', `next_bylong` varchar(20) DEFAULT '0.00', `engine` varchar(50) DEFAULT NULL, `chejia` varchar(50) DEFAULT NULL, `danganhao` varchar(30) DEFAULT NULL, `buy_date` varchar(20) DEFAULT NULL, `first_date` varchar(20) DEFAULT NULL, `weixiu_times` tinyint(4) DEFAULT NULL, `weixiu_money` decimal(8,2) DEFAULT NULL, `last_date` varchar(20) DEFAULT NULL, `last_jieche` varchar(50) DEFAULT NULL, `cpai_register` varchar(20) DEFAULT NULL, `identify_number` varchar(20) DEFAULT NULL, `order_number` varchar(20) DEFAULT NULL, `sale_date` varchar(20) DEFAULT NULL, `carkilometre` int(11) DEFAULT '0', `address` varchar(32) DEFAULT NULL, `remark` varchar(32) DEFAULT NULL, `is_check` int(11) DEFAULT '0', `password` char(6) DEFAULT NULL, `salt` char(32) DEFAULT NULL, `pay_password` char(32) DEFAULT NULL, `pay_salt` char(6) DEFAULT NULL, `status` tinyint(4) DEFAULT '0', `time` varchar(24) NOT NULL, `headimgurl` varchar(200) DEFAULT NULL, `nickname` varchar(32) DEFAULT NULL, `isattention` tinyint(4) DEFAULT '0', `paid_price` decimal(8,2) DEFAULT '0.00', `source` int(11) DEFAULT NULL, `add_date` datetime DEFAULT NULL, `add_by` varchar(30) DEFAULT '', `update_date` datetime DEFAULT NULL, `update_by` varchar(30) DEFAULT '', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=59151 DEFAULT CHARSET=utf8; </code>
선물 테이블 구조(약 4000개 데이터):
<code>CREATE TABLE `member_giftamount` ( `id` int(16) NOT NULL AUTO_INCREMENT, `wid` int(32) NOT NULL, `mid` int(11) NOT NULL, `auth_wid` int(11) DEFAULT NULL, `wxid` varchar(64) DEFAULT NULL, `tel` varchar(30) DEFAULT NULL, `amount` decimal(8,2) DEFAULT '0.00', `gift_amount` decimal(8,2) DEFAULT '0.00', `refund_amount` decimal(8,2) DEFAULT '0.00', `credits` int(11) DEFAULT '0', `total` decimal(8,2) DEFAULT '0.00', `market_total` decimal(8,2) DEFAULT '0.00', `wid_wxid` varchar(64) DEFAULT NULL, `wait_total` decimal(8,2) DEFAULT '0.00', `add_date` datetime DEFAULT NULL, `add_by` varchar(30) DEFAULT NULL, `update_date` datetime DEFAULT NULL, `update_by` varchar(30) DEFAULT NULL, `sign_days` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=4254 DEFAULT CHARSET=utf8; </code>
인덱스 최적화: g 테이블 mid에 인덱스를 추가하고, 인덱스가 사용되는지 확인하기 위해 느린 쿼리를 사용하고, 행 수를 최대한 작게 유지하세요.
-
색인
멤버 테이블의 인덱스(id,wid,wxid,wid_wxid)
선물 테이블의 인덱스(id,wid,mid,auth_wid,wxid)
일부 필드가 where 조건에 자주 나타나는 경우 인덱스도 생성해야 합니다.
* 기호를 사용하지 마세요: 필수 필드만 나열하세요
SQL 참조: SQL은 제가 직접 작성했으며 테스트를 거치지 않았습니다.
<code>select 不要用* from (SELECT m.status,m.wid,m.id FROM member m WHERE m.status = 0 AND m.wid = 236) a LEFT JOIN gift g ON g.mid = a.id ORDER BY a.id DESC LIMIT 0,20</code>
선물 중간 필드에 대한 외래 키를 생성하고 이를 회원 테이블의 ID와 연결
데이터를 몰라도 참고할만한 가치가 있나요?
http://www.zhihu.com/question/37777220
실행계획을 올려주세요
하위 쿼리를 사용하여 인덱스를 만듭니다.

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

MySQL 및 Phpmyadmin은 다음 단계를 통해 효과적으로 관리 할 수 있습니다. 1. 데이터베이스 작성 및 삭제 : Phpmyadmin을 클릭하여 완료하십시오. 2. 테이블 관리 : 테이블을 만들고 구조를 수정하고 인덱스를 추가 할 수 있습니다. 3. 데이터 작동 : 삽입, 업데이트, 데이터 삭제 및 SQL 쿼리 실행을 지원합니다. 4. 가져 오기 및 내보내기 데이터 : SQL, CSV, XML 및 기타 형식을 지원합니다. 5. 최적화 및 모니터링 : 최적화 가능한 명령을 사용하여 테이블을 최적화하고 쿼리 분석기 및 모니터링 도구를 사용하여 성능 문제를 해결하십시오.

AI는 작곡가 사용을 최적화하는 데 도움이 될 수 있습니다. 특정 방법에는 다음이 포함됩니다. 1. 종속성 관리 최적화 : AI는 종속성을 분석하고 최상의 버전 조합을 권장하며 충돌을 줄입니다. 2. 자동화 된 코드 생성 : AI는 모범 사례를 준수하는 composer.json 파일을 생성합니다. 3. 코드 품질 향상 : AI는 잠재적 인 문제를 감지하고 최적화 제안을 제공하며 코드 품질을 향상시킵니다. 이러한 방법은 기계 학습 및 자연어 처리 기술을 통해 구현되어 개발자가 효율성과 코드 품질을 향상시킬 수 있도록 도와줍니다.

MySQL에서는 altertabletable_nameaddcolumnnew_columnvarchar (255) 이후에 필드를 추가하여 altertabletable_namedropcolumncolumn_to_drop을 사용하여 필드를 삭제합니다. 필드를 추가 할 때는 쿼리 성능 및 데이터 구조를 최적화하기위한 위치를 지정해야합니다. 필드를 삭제하기 전에 작업이 돌이킬 수 없는지 확인해야합니다. 온라인 DDL, 백업 데이터, 테스트 환경 및 저하 기간을 사용하여 테이블 구조 수정은 성능 최적화 및 모범 사례입니다.

session_start () iscrucialinphpformanagingUsersessions.1) itiniteSanewsessionifnoneexists, 2) ResumesAnxistessions, and3) setSasessionCookieForContInuityAcrosrequests, enablingplicationsirecationSerauthenticationAndpersonalizestContent.

MySQL을 안전하고 철저하게 제거하고 모든 잔차 파일을 정리하려면 다음 단계를 따르십시오. 1. MySQL 서비스 중지; 2. MySQL 패키지 제거; 3. 구성 파일 및 데이터 디렉토리를 정리하십시오. 4. 제거가 철저한 지 확인하십시오.

MySQL에 데이터 삽입을위한 효율적인 방법은 다음과 같습니다. 1. InsertInto 사용 ... 값 구문 사용 ... 값 구문, 2. 트랜잭션 처리 사용, 3. 트랜잭션 처리 사용, 4. 배치 크기 조정, 5. 인덱스 비활성화, 6. Insertignore 또는 Insert ... ondupliceKeyUpdate를 사용하여 데이터베이스 작동 효율성을 크게 향상시킬 수 있습니다.

MySQL 기능은 데이터 처리 및 계산에 사용될 수 있습니다. 1. 기본 사용에는 문자열 처리, 날짜 계산 및 수학 연산이 포함됩니다. 2. 고급 사용에는 복잡한 작업을 구현하기 위해 여러 기능을 결합하는 것이 포함됩니다. 3. 성능 최적화를 위해서는 WHERE 절에서 기능 사용 및 GroupBy 및 임시 테이블 사용을 피해야합니다.

MySQL에서 문자 세트 및 콜라주를 구성하는 방법은 다음과 같습니다. 1. 서버 수준에서 문자 세트 및 콜라주 설정 : setNames'Utf8 '; setcharactersetutf8; setCollation_connection = 'utf8_general_ci'; 2. 특정 문자 세트 및 콜라주를 사용하는 데이터베이스를 만듭니다. createAbaseexample_DBCHARACTERSETUTF8COLLATEUTF8_GENERAL_CI; 3. 테이블을 만들 때 문자 세트 및 콜라주를 지정하십시오 : CreateTableAmplipt_table (idint
