>  기사  >  데이터 베이스  >  mysql 인덱스의 추가, 삭제, 수정 및 쿼리를 구현하는 방법은 무엇입니까?

mysql 인덱스의 추가, 삭제, 수정 및 쿼리를 구현하는 방법은 무엇입니까?

青灯夜游
青灯夜游원래의
2020-10-14 16:45:563193검색

mysql에서는 "CREATE INDEX" 문을 사용하여 인덱스를 볼 수 있으며, "DROP INDEX" 문을 사용하여 인덱스를 삭제하고 수정할 수 있습니다. 원본 인덱스를 만든 다음 필요에 따라 동일한 이름의 인덱스를 생성하여 인덱스를 수정하는 작업을 구현합니다.

mysql 인덱스의 추가, 삭제, 수정 및 쿼리를 구현하는 방법은 무엇입니까?

(권장 튜토리얼: mysql 비디오 튜토리얼)

mysql 인덱스 생성

인덱스 생성은 테이블의 하나 이상의 열에 인덱스를 설정하는 것을 의미하며, 이는 성능을 향상시킬 수 있습니다. 테이블 접근 속도. MySQL 데이터베이스를 효율적으로 운영하려면 인덱스를 생성하는 것이 중요합니다.

기본 구문

MySQL은 인덱스를 생성하는 세 가지 방법을 제공합니다.

1) CREATE INDEX 문 사용

특히 인덱스 생성을 위해 CREATE INDEX 문을 사용하여 기존 테이블에 인덱스를 생성할 수 있지만 이 명령문은 기본 키를 생성할 수 없습니다.

구문 형식:

CREATE <索引名> ON <表名> (<列名> [<长度>] [ ASC | DESC])

구문 설명은 다음과 같습니다.

  • 807053e397f7ee6849c7324c778ecc6d: 인덱스 이름을 지정합니다. 테이블은 여러 인덱스를 생성할 수 있지만 각 인덱스는 테이블에서 고유한 이름을 갖습니다.

  • 34cd3e9c1174c81e3622d1820b4b2875: 인덱스를 생성할 테이블의 이름을 지정합니다.

  • : 인덱스를 생성할 열 이름을 지정합니다. 일반적으로 쿼리 문의 JOIN 절과 WHERE 절에 자주 나타나는 열을 인덱스 열로 사용하는 것을 고려할 수 있습니다.

  • 41896d10050eaeae4e522ca1d7322455: 선택사항. 열 앞의 길이 문자를 사용하여 인덱스를 생성하도록 지정합니다. 열의 일부를 사용하여 인덱스를 생성하면 인덱스 파일의 크기를 줄이고 인덱스 열이 차지하는 공간을 절약하는 데 도움이 됩니다. 어떤 경우에는 열의 접두사만 인덱싱할 수 있습니다. 인덱스 열의 길이는 최대 255바이트(MyISAM 및 InnoDB 테이블의 경우 1000바이트)로 제한됩니다. 인덱스 열의 길이가 이 제한을 초과하는 경우 해당 열의 접두사를 통해서만 인덱싱할 수 있습니다. 또한 BLOB 또는 TEXT 유형의 열은 접두사 인덱스도 사용해야 합니다.

  • ASC|DESC: 선택사항. ASC는 인덱스가 오름차순으로 정렬되도록 지정하고, DESC는 인덱스가 내림차순으로 정렬되도록 지정하며 기본값은 ASC입니다.

2) CREATE TABLE 문 사용

테이블 생성(CREATE TABLE) 중에도 인덱스를 생성할 수 있습니다. CREATE TABLE 문에 다음 문을 추가합니다. 구문 형식:

CONSTRAINT PRIMARY KEY [索引类型] (<列名>,…)

CREATE TABLE 문에 이 문을 추가하여 새 테이블을 생성하는 동안 테이블의 기본 키가 생성됨을 나타냅니다.

구문 형식:

KEY | INDEX [<索引名>] [<索引类型>] (<列名>,…)

새 테이블을 생성하는 동안 테이블에 대한 인덱스를 생성하려면 CREATE TABLE 문에 이 문을 추가하세요.

구문 형식:

UNIQUE [ INDEX | KEY] [<索引名>] [<索引类型>] (<列名>,…)

새 테이블을 생성하는 동안 테이블에 대한 고유 인덱스를 생성하려면 CREATE TABLE 문에 이 문을 추가하세요.

구문 형식:

FOREIGN KEY <索引名> <列名>

새 테이블을 생성하는 동안 테이블에 대한 외래 키를 생성하려면 CREATE TABLE 문에 이 문을 추가하세요.

CREATE TABLE 문을 사용하여 열 옵션을 정의할 때 열 정의 바로 뒤에 PRIMARY KEY를 추가하여 기본 키를 생성할 수 있습니다. 기본 키가 여러 열로 구성된 다중 열 인덱스인 경우 이 방법을 사용할 수 없으며 명령문 끝에 PRIMARY KRY(,...) 절을 추가해야만 구현할 수 있습니다. .

3) ALTER TABLE 문을 사용하세요.

CREATE INDEX 문으로 기존 테이블에 인덱스를 생성할 수 있고, ALTER TABLE 문으로도 기존 테이블에 인덱스를 생성할 수 있습니다. ALTER TABLE 문을 사용하여 테이블을 수정하는 동안 기존 테이블에 인덱스를 추가할 수 있습니다. 구체적인 방법은 다음 구문 구성 요소 중 하나 이상을 ALTER TABLE 문에 추가하는 것입니다.

구문 형식:

ADD INDEX [<索引名>] [<索引类型>] (<列名>,…)

테이블을 수정하는 동안 테이블에 인덱스를 추가하려면 ALTER TABLE 문에 이 구문 구성 요소를 추가하세요.

구문 형식:

ADD PRIMARY KEY [<索引类型>] (<列名>,…)

테이블을 수정하는 동안 테이블에 기본 키를 추가하려면 ALTER TABLE 문에 이 구문 구성 요소를 추가하세요.

구문 형식:

ADD UNIQUE [ INDEX | KEY] [<索引名>] [<索引类型>] (<列名>,…)

테이블을 수정하는 동안 테이블에 고유 인덱스를 추가하려면 ALTER TABLE 문에 이 구문 구성 요소를 추가하세요.

구문 형식:

ADD FOREIGN KEY [<索引名>] (<列名>,…)

테이블을 수정하는 동안 테이블에 외래 키를 추가하려면 ALTER TABLE 문에 이 구문 구성 요소를 추가하세요.

mysql 인덱스 보기

인덱스가 생성된 후 SQL 문을 사용하여 기존 인덱스를 볼 수 있습니다. MySQL에서는 SHOW INDEX 문을 사용하여 테이블에 생성된 인덱스를 볼 수 있습니다.

인덱스를 보기 위한 구문 형식은 다음과 같습니다.

SHOW INDEX FROM <表名> [ FROM <数据库名>]

구문 설명은 다음과 같습니다.

  • 34cd3e9c1174c81e3622d1820b4b2875: 인덱스를 보려는 데이터 테이블의 이름을 지정합니다.

  • 977bf00c4d30736c9c11101ae25dc2f2: 조회하려는 데이터 테이블이 위치한 데이터베이스를 인덱스로 지정하며, 생략 가능합니다. 예를 들어, SHOW INDEX FROM Student FROM test; 문은 테스트 데이터베이스에 있는 학생 데이터 테이블의 인덱스를 보는 것을 의미합니다.

Example

SQL문과 실행 결과는 아래와 같습니다.

mysql> SHOW INDEX FROM tb_stu_info2\G
*************************** 1. row ***************************
        Table: tb_stu_info2
   Non_unique: 0
     Key_name: height
 Seq_in_index: 1
  Column_name: height
    Collation: A
  Cardinality: 0
     Sub_part: NULL
       Packed: NULL
         Null: YES
   Index_type: BTREE
      Comment:
Index_comment:
1 row in set (0.03 sec)

MySQL 인덱스 수정 및 삭제

删除索引是指将表中已经存在的索引删除掉。不用的索引建议进行删除,因为它们会降低表的更新速度,影响数据库的性能。对于这样的索引,应该将其删除。

在 MySQL 中修改索引可以通过删除原索引,再根据需要创建一个同名的索引,从而实现修改索引的操作。

基本语法

当不再需要索引时,可以使用 DROP INDEX 语句或 ALTER TABLE 语句来对索引进行删除。

1) 使用 DROP INDEX 语句

语法格式:

DROP INDEX <索引名> ON <表名>

语法说明如下:

  • b493f009a433abb929a361542484fbbf:要删除的索引名。

  • a26d98d33123a70024fa8ba5642906c6:指定该索引所在的表名。

2) 使用 ALTER TABLE 语句

根据 ALTER TABLE 语句的语法可知,该语句也可以用于删除索引。具体使用方法是将 ALTER TABLE 语句的语法中部分指定为以下子句中的某一项。

  • DROP PRIMARY KEY:表示删除表中的主键。一个表只有一个主键,主键也是一个索引。

  • DROP INDEX index_name:表示删除名称为 index_name 的索引。

  • DROP FOREIGN KEY fk_symbol:表示删除外键。

注意:如果删除的列是索引的组成部分,那么在删除该列时,也会将该列从索引中删除;如果组成索引的所有列都被删除,那么整个索引将被删除。

删除索引

【实例 1】删除表 tb_stu_info 中的索引,输入的 SQL 语句和执行结果如下所示。

mysql> DROP INDEX height
    -> ON tb_stu_info;
Query OK, 0 rows affected (0.27 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> SHOW CREATE TABLE tb_stu_info\G
*************************** 1. row ***************************
       Table: tb_stu_info
Create Table: CREATE TABLE `tb_stu_info` (
  `id` int(11) NOT NULL,
  `name` char(45) DEFAULT NULL,
  `dept_id` int(11) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `height` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gb2312
1 row in set (0.00 sec)

【实例 2】删除表 tb_stu_info2 中名称为 id 的索引,输入的 SQL 语句和执行结果如下所示。

mysql> ALTER TABLE tb_stu_info2
    -> DROP INDEX height;
Query OK, 0 rows affected (0.13 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> SHOW CREATE TABLE tb_stu_info2\G
*************************** 1. row ***************************
       Table: tb_stu_info2
Create Table: CREATE TABLE `tb_stu_info2` (
  `id` int(11) NOT NULL,
  `name` char(45) DEFAULT NULL,
  `dept_id` int(11) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `height` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gb2312
1 row in set (0.00 sec)

위 내용은 mysql 인덱스의 추가, 삭제, 수정 및 쿼리를 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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