>  기사  >  데이터 베이스  >  MySql에서 매우 중요한 인덱스 작업

MySql에서 매우 중요한 인덱스 작업

黄舟
黄舟원래의
2017-09-30 10:59:161425검색

기본에 집중 - 잊혀지지 않는 MySql 인덱스 작업

여기서는 MySql 인덱스에 대한 기본 지식에 대해 쓰지 않겠습니다.

  팁 공유: Workbench는 MySQL용으로 특별히 설계된 ER/데이터베이스 모델링 도구입니다. 데이터베이스 관리 외에도 SQL 문을 생성하는 강력한 도구이기도 합니다. 합리적으로 사용하면 절반의 노력으로 두 배의 결과를 얻을 수 있습니다. 물론, 전제는 우리가 기본 지식을 이해한다는 것입니다.

먼저 인덱스 작업에 대한 몇 가지 SQL 문을 정리하겠습니다. 문제가 발생했을 때 Baidu에서 찾은 답변이 기본적으로 잘못이었기 때문입니다. . 수정하러 오세요 .

  1. 다중 기본 키(PRIMARY) 삭제

  가정 시나리오: 테이블에 다중 기본 키(PRIMARY)를 정의했습니다. 예: id는 자동 증가 기본 키입니다. , userCode도 기본 키로 정의되고 userAge도 기본 키로 정의됩니다. ID 하나만 유지하고 나머지 두 개를 삭제하려는 경우 해당 SQL 문은 다음과 같습니다.

 설명: 지정된 테이블을 수정하고 PRIMARY KEY를 삭제하고 ID를 PRIMARY로 추가합니다. 열쇠.


ALTER TABLE `表名` 
DROP PRIMARY KEY,ADD PRIMARY KEY (`id`);

 2. 일반 인덱스 추가

 경고: table_name은 제가 강조하고 싶은 내용이 아닙니다. index_field 이름과 같은 이름 지정을 합리적으로 표준화해야 하며, 더 좋은 이름이 있으면 메시지를 남겨주세요.

   그렇지 않으면 오류가 보고됩니다: MySQL의 중복 키 오류(중복 키 이름 ''). 물론 index_name이 변경되지 않았기 때문입니다. Index_name이 사용됩니다.


ALTER  TABLE  `table_name`  ADD  INDEX index_name (`column`)

3. 인덱스 사용 사양에 대하여

(1) 인덱스 사용

인덱스를 잘못 사용하면 저장소만 차지하는 것이 아닙니다. 공간이 부족하고 쿼리 속도에 역효과를 줄 수 있으므로 인덱스를 정의하려면 데이터베이스 설계에 대한 명확한 이해가 필요합니다. 인덱스 작성을 위한 몇 가지 원칙

1.最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。

2.=和in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式

3.尽量选择区分度高的列作为索引,区分度的公式是count(distinct col)/count(*),表示字段不重复的比例,比例越大我们扫描的记录数越少,唯一键的区分度是1,而一些状态、性别字段可能在大数据面前区分度就是0,那可能有人会问,这个比例有什么经验值吗?使用场景不同,这个值也很难确定,一般需要join的字段我们都要求是0.1以上,即平均1条扫描10条记录

4.索引列不能参与计算,保持列“干净”,比如from_unixtime(create_time) = ’2014-05-29’就不能使用到索引,原因很简单,b+树中存的都是数据表中的字段值,但进行检索时,需要把所有元素都应用函数才能比较,显然成本太大。所以语句应该写成create_time = unix_timestamp(’2014-05-29’);

5.尽量的扩展索引,不要新建索引。比如表中已经有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可

 

  (2). 인덱스 유형

1. 일반 인덱스
제한이 없는 가장 기본적인 인덱스

2. 고유 인덱스
인덱스 열의 값은 고유해야 합니다. 하지만 허용됩니다. null 값이 있습니다 ​​

  3. 기본 키 인덱스
  기본 키 인덱스는 특별한 고유 인덱스이며 null 값은 허용되지 않습니다

4. 단일 열 인덱스
  단일 다중 열 인덱스 (결합 인덱스)는 여러 단일 열 인덱스보다 효율적입니다

  5 .가장 왼쪽 접두사: 다중 열 인덱스

위 내용은 MySql에서 매우 중요한 인덱스 작업의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.