>  기사  >  데이터 베이스  >  MySQL 인덱스 작업

MySQL 인덱스 작업

一个新手
一个新手원래의
2017-09-30 10:00:39856검색

여기서는 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_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. 고유 인덱스
 인덱스 열의 값은 고유해야 하지만 비어 있어야 합니다. 값

3. 기본 키 인덱스
기본 키 인덱스는 null 값을 허용하지 않는 특별한 고유 인덱스입니다 ​​

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

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

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

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