mysql 인덱스의 개념과 조작
12113 단어 mysql인덱스 개념 및 작업Mysql
key:일반 인덱스
unique key:고유 인덱스
primary key:기본 키 인덱스
full text:전체 텍스트 인덱스
테이블 t8 만들기 일반 인덱스 키와 유일한 인덱스 unique 키 추가하기
mysql> create table t8 ( id int, name char(10), email char(20),key name(name),unique key(email) );
Query OK, 0 rows affected (0.01 sec)
테이블 구조를 보려면 다음과 같이 하십시오.
mysql> desc t8;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | char(10) | YES | MUL | NULL | |
| email | char(20) | YES | UNI | NULL | |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)
데이터를 삽입하려면 다음과 같이 하십시오.
mysql> insert into t8 values ("1","lisi","[email protected]")
-> ;
Query OK, 1 row affected (0.01 sec)
쿼리 데이터:
mysql> select * from t8;
+------+------+----------------+
| id | name | email |
+------+------+----------------+
| 1 | lisi | [email protected] |
+------+------+----------------+
1 row in set (0.00 sec)
#unique key 유일성,[email protected]메일박스가 이미 존재합니다. 같은 것을 허용하지 않습니다.
mysql> insert into t8 values ("2","lisi","[email protected]")
-> ;
ERROR 1062 (23000): Duplicate entry '[email protected]' for key 'email'
테이블 t9 만들기, 키 키:
mysql> create table t9 ( id int, name char(10), email char(20),primary key (id),key id (name),unique key(email) );
Query OK, 0 rows affected (0.04 sec)
mysql> desc t9;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int(11) | NO | PRI | 0 | |
| name | char(10) | YES | MUL | NULL | |
| email | char(20) | YES | UNI | NULL | |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)
## 인덱스 길이: 인덱스를 작성할 때 열 앞부분만 인덱스할 수 있습니다. 예를 들어 처음 10자입니다.
키 id와 같이 (email(10)
# 인덱스 이메일 길이는 10자입니다. 테이블의 이메일 열에 10자만 삽입할 수 있는 것이 아니라 인덱스 인용 시 emial 열 앞의 10자만 인용할 수 있습니다.
mysql> create table t10 ( id int, name char(10), email char(20),primary key (id),key id (email(10)),unique key(email) );
Query OK, 0 rows affected (0.02 sec)
mysql> desc t10;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int(11) | NO | PRI | 0 | |
| name | char(10) | YES | | NULL | |
| email | char(20) | YES | UNI | NULL | |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)
# 10자 이상의 이메일을 삽입해도 됩니다.
mysql> insert into t10 values (1,"lisi","[email protected]");
Query OK, 1 row affected (0.01 sec)
다열 인덱스: 2개 혹은 다열의 값을 하나의 전체로 보고 인덱스를 만듭니다.
mysql> create table t11 (
-> xing char(2),
-> ming char(10),
-> key xm(xing,ming)
-> );
Query OK, 0 rows affected (0.02 sec)
mysql> desc t11;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| xing | char(2) | YES | MUL | NULL | |
| ming | char(10) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> insert into t11 values (" "," ");
Query OK, 1 row affected (0.00 sec)
mysql> select * from t11;
+------+--------+
| xing | ming |
+------+--------+
| | |
+------+--------+
1 row in set (0.00 sec)
테이블 t11의 색인을 보려면 다음과 같이 하십시오.
mysql> show index from t11 \G;
*************************** 1. row ***************************
Table: t11
Non_unique: 1
Key_name: xm
Seq_in_index: 1
Column_name: xing
Collation: A
Cardinality: 1
Sub_part: NULL
Packed: NULL
Null: YES
Index_type: BTREE
Comment:
Index_comment:
*************************** 2. row ***************************
Table: t11
Non_unique: 1
Key_name: xm
Seq_in_index: 2
Column_name: ming
Collation: A
Cardinality: 1
Sub_part: NULL
Packed: NULL
Null: YES
Index_type: BTREE
Comment:
Index_comment:
2 rows in set (0.00 sec)
ERROR:
No query specified
# 다중 열 색인에 대한 질의입니다.
mysql> select * from t11 where xing=" " and ming=" ";
+------+--------+
| xing | ming |
+------+--------+
| | |
+------+--------+
1 row in set (0.01 sec)
질의에 사용할 색인 보기:explain
possible_keys: 사용할 수 있는 키
키:찾은 키.
mysql> explain select * from t11 where xing=" " and ming=" ";
+----+-------------+-------+------+---------------+------+---------+-------------+------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+-------------+------+--------------------------+
| 1 | SIMPLE | t11 | ref | xm | xm | 38 | const,const | 1 | Using where; Using index |
+----+-------------+-------+------+---------------+------+---------+-------------+------+--------------------------+
1 row in set (0.00 sec)
mysql> explain select * from t11 where xing=" ";
+----+-------------+-------+------+---------------+------+---------+-------+------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+-------+------+--------------------------+
| 1 | SIMPLE | t11 | ref | xm | xm | 7 | const | 1 | Using where; Using index |
+----+-------------+-------+------+---------------+------+---------+-------+------+--------------------------+
1 row in set (0.00 sec)
mysql> explain select * from t11 where ming=" ";
+----+-------------+-------+-------+---------------+------+---------+------+------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+------+---------+------+------+--------------------------+
| 1 | SIMPLE | t11 | index | NULL | xm | 38 | NULL | 1 | Using where; Using index |
+----+-------------+-------+-------+---------------+------+---------+------+------+--------------------------+
1 row in set (0.00 sec)
mysql> explain select * from t11 where ming=" " and xing=" ";
+----+-------------+-------+------+---------------+------+---------+-------------+------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+-------------+------+--------------------------+
| 1 | SIMPLE | t11 | ref | xm | xm | 38 | const,const | 1 | Using where; Using index |
+----+-------------+-------+------+---------------+------+---------+-------------+------+--------------------------+
1 row in set (0.00 sec)
불필요한 인덱스: 어떤 열에 여러 개의 인덱스가 존재할 수 있습니다.예를 들어 xm(xing,ming)m(ming).목적은 조회 속도를 높이는 데 있다.
mysql> create table t12 ( xing char(2), ming char(10), key xm(xing,ming),key m(ming) );
Query OK, 0 rows affected (0.02 sec)
테이블 t12에서 사용한 색인을 보려면 다음과 같이 하십시오.
mysql> show index from t12;
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| t12 | 1 | xm | 1 | xing | A | 0 | NULL | NULL | YES | BTREE | | |
| t12 | 1 | xm | 2 | ming | A | 0 | NULL | NULL | YES | BTREE | | |
| t12 | 1 | m | 1 | ming | A | 0 | NULL | NULL | YES | BTREE | | |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
3 rows in set (0.00 sec)
mysql> show index from t12 \G;
*************************** 1. row ***************************
Table: t12
Non_unique: 1
Key_name: xm
Seq_in_index: 1
Column_name: xing
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null: YES
Index_type: BTREE
Comment:
Index_comment:
*************************** 2. row ***************************
Table: t12
Non_unique: 1
Key_name: xm
Seq_in_index: 2
Column_name: ming
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null: YES
Index_type: BTREE
Comment:
Index_comment:
*************************** 3. row ***************************
Table: t12
Non_unique: 1
Key_name: m
Seq_in_index: 1
Column_name: ming
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null: YES
Index_type: BTREE
Comment:
Index_comment:
3 rows in set (0.00 sec)
ERROR:
No query specified
#색인을 삭제합니다.
구문:
alter table 테이블 이름drop index 인덱스 이름
drop index 인덱스 이름 on 테이블 이름
mysql> alter table t12 drop index m;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> drop index xm on t12;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show index from t12 \G;
Empty set (0.00 sec)
ERROR:
No query specified
색인 추가
alter table add [index/unique] ;
mysql> alter table t12 add index xm(xing,ming);
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> alter table t12 add unique m(ming);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show create table t12;
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t12 | CREATE TABLE `t12` (
`xing` char(2) DEFAULT NULL,
`ming` char(10) DEFAULT NULL,
UNIQUE KEY `m` (`ming`),
KEY `xm` (`xing`,`ming`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
키 인덱스 추가
mysql> alter table t12 add primary key(xing);
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
키 인덱스 삭제
mysql> alter table t12 drop primary key;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MySQL에서 JSON 인덱싱 - aarondfrancis사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 말하지만 완전히 정확하지는 않습니다. MySQL로 JSON 열을 인덱싱하는 것은 완전히 가능합니다! 사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.