기사 디렉토리
인덱스
1. 기본 SQL 문
1. 색인 생성
CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX 索引名 ON 表名(字段名) [USING 索引方法];
2. 색인 삭제
drop index 索引名
3. 색인보기
show index on tablename;
2. 성능 저하 이유
1. 잘못 작성된 쿼리 문
2. 인덱스 오류 : 단일 값 인덱스, 복합 인덱스
3. 너무 많은 조인 (디자인 결함 또는 비 균일 요구 사항)
4. 서버 튜닝 및 다양한 매개 변수 설정 (캐시, 스레드 수)
3. 장점
- 쿼리 속도 향상
- 정렬 감소
4. 단점
- 간격 잠금을 늘리고 데이터 업데이트 속도를 늦 춥니 다.
- 시간을내어 최적화 된 인덱스를 작성하십시오.
5. 분류
- 단일 값 인덱스 : 단일 열만 포함
- 고유 색인 : 색인의 값이 고유하며 비어있을 수 있습니다.
- 복합 색인 : 여러 열이있는 색인
6. 검색 원리
- B 트리
- 해시시
- r 나무
- 전문
7. 어떤 상황에서 인덱스 생성
- 기본 키는 자동으로 인덱싱됩니다 (킹의 사용자 이름과 영역은 공동 기본 키가 아닙니다. 그렇죠 ?? 자주 업데이트하지 마십시오. 사용자 이름과 파티션을 사용하여 추첨을 수행 할 수 있습니다!)
- 외래 키 인덱싱
- 통계 그룹화 및 정렬에 사용되는 필드 인덱싱
- 높은 동시성은 공동 인덱스를 구축하는 경향이 있습니다.
- 자주 쿼리되는 필드의 인덱싱
8. 어떤 상황에서 인덱스가 설정되지 않습니까?
- 사용자 자신의 프로필과 같이 어디에 사용되지 않는 필드
- 자주 업데이트되는 필드는 인덱싱을 의미하지 않습니다.
- 테이블에 3 백만 미만의 레코드가 거의 없습니다.
- 데이터의 반복률이 너무 높습니다.
9. 성능 분석
1. 설명
- 사용하다
- 유형
- 특별한
- 열
- 가능한 키
- 키
- 표
- 신분증
- 심판
2. 느린 쿼리 로그
4. 배치 데이터 스크립트
5. 쇼 프로필
6. 글로벌 로그 쿼리
7. 일반적인 아이디어
- 느린 쿼리 로그를 시작하고 캡처합니다.
- 설명 + SQL 분석.
- show profile은 서버에서 SQL의 실행 세부 정보와 수명주기를 쿼리합니다.
- SQL 데이터 서버의 매개 변수 튜닝.
10. 성능 최적화
1. 단일 테이블 연결
2. 두 개의 테이블이 연결됨
1. 좌우 연결 + 반대 인덱스 (왼쪽 연결 + 오른쪽 테이블, 오른쪽 연결 + 왼쪽 테이블)
3. 3 개 테이블 최적화 사례
- 작은 테이블이 큰 테이블을이 끕니다
- 먼저 하위 집합 최적화
- 조인 테이블에 최적화 된 문이 있는지 확인
- 조인 버퍼로 인색하지 마십시오.
4. 인덱스 최적화 원칙
- 내가 가장 좋아하는 전체 경기
create index on user a('c', 'd', 'e');
select * from user where c = 'x'; #可以用到索引
select * from user where d = 'y' and e = 'z' #索引失效了
第二个违背了最佳左前缀法则:
建立索引的第一字段不能丢(索引失效)
建立索引的中间字段不能断(否则部分使用索引)
- 인덱스에 대해 함수 작업을 수행하지 마십시오 (계산, 함수, 유형 변환).
select * from user where left(id, 4) = 1;#在索引left上使用了函数
- 범위를 사용한 후 모든 무효화, 인덱싱 된 필드를 선택 (선택)하십시오.
select * from user where id = 4 and age > 1 and name = "te";#使用了范围
范围之后的就失效了, id会用到索引,但是age和age之后就会出现索引失效
select id, age, name where id = 4 and age > 1 and name = "te"#会使用索引,所以仍旧是使用索引
- <>,! =, is null, null, is not null, like "% name"등을 사용하면 인덱스가 실패합니다.
select * from name where name like "%name";#索引失效
select * from name where name like "name%";#like 百分在右边
왼쪽을로드해야하는 경우 어떻게합니까?
커버링 인덱스 사용
create index on user idx_name_age(`name`, `age`);
select name, from user where name like "%tea%";
- varchar 유형은 작은 따옴표로 묶어야합니다.
select * from name = '3000';
select * from name = 3000;#索引失效
都能查到,但是出现了隐式的类型转换
앞의 맏형은 죽을 수없고, 중형은 깨질 수 없습니다. 퍼센트 기호 뒤에 오는 퍼센트 기호, 문자열 유형은 따옴표로 묶이고 범위 뒤의 모든 것은 유효하지 않습니다.
- group by는 임시 테이블을 생성 할 수 있음
- 작은 테이블이 큰 테이블을 주도합니다.
select * from A where id in (select id from B);#B表小于大表
select * from A where exists(select id from B);#A表小于大表
exists就是把A中的字段放入子查询寻中进行比较。