MySQL->索引的维护[20180504]
2024-08-31 05:19:35
学习MySQL数据库中表的索引维护(新增和删除)
索引的好处:
提高查询的效率
可限定特定的资料(如唯一)
索引的不足:
如果过多的索引,会影响Insert,Update的速率,因为资料插入和更新同时也会维护索引。
消耗更多的存储空间
索引按列可分为,单列索引和组合索引。单列只包含表中的一列,组合索引可包含当前表中多列栏位。
创建普通索引
CREATE INDEX <index_name> ON <tab_name>(<col_name>(length));
如果列的类型是CHAR,VARCHAR可以不指定length的值。
如果列的类型是BLOB,TEXT则需指定length的值
创建表时建立索引
CREATE TABLE <tab_name>(
<col_name> TYPE,....
[INDEX_TYPE] <index_name>(<col_name>(length))
engine=InnoDB default charset=utf8;
mysql> create table index_tab03(
-> id int,
-> col01 varchar(20),
-> index index_01(col01)
-> )engine=InnoDB default charset=utf8;
Query OK, 0 rows affected (0.01 sec) mysql> desc index_tab03;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| col01 | varchar(20) | YES | MUL | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec) mysql> show index from index_tab03\G
*************************** 1. row ***************************
Table: index_tab03
Non_unique: 1
Key_name: index_01
Seq_in_index: 1
Column_name: col01
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null: YES
Index_type: BTREE
Comment:
1 row in set (0.00 sec)
m
ALTER语句维护索引
ALTER TABLE <tab_name> ADD PRIMARY KEY(<column_list>);#增加一个主键,唯一和非空
ALTER TABLE <tab_name> ADD UNIQUE <index_name>(<column_list>);#增加一个唯一索引,列中可以为NULL并且可以有多次
ALTER TABLE <tab_name> ADD INDEX <index_name>(<column_list>);#增加一个普通索引
ALTER TABLE <tab_name> ADD FULLTEXT <index_name>(<column_list>);增加一个全文索引,注意只有MyISAM引擎支持
mysql> alter table index_tab01 add primary key(id,col01);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0 mysql> alter table index_tab01 add index indx_01(col01);
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0 mysql> alter table index_tab01 add fulltext indx_02(col01,col02(300));
ERROR 1214 (HY000): The used table type doesn't support FULLTEXT indexes mysql> alter table index_tab01 engine=MyISAM;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0 mysql> alter table index_tab01 add fulltext index_02(col01,col02(30));
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0 mysql> show index from index_tab01\G
*************************** 1. row ***************************
Table: index_tab01
Non_unique: 0
Key_name: PRIMARY
Seq_in_index: 1
Column_name: id
Collation: A
Cardinality: NULL
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE
Comment:
*************************** 2. row ***************************
Table: index_tab01
Non_unique: 0
Key_name: PRIMARY
Seq_in_index: 2
Column_name: col01
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE
Comment:
*************************** 3. row ***************************
Table: index_tab01
Non_unique: 0
Key_name: index_un
Seq_in_index: 1
Column_name: col01
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE
Comment:
*************************** 4. row ***************************
Table: index_tab01
Non_unique: 1
Key_name: indx_01
Seq_in_index: 1
Column_name: col01
Collation: A
Cardinality: NULL
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE
Comment:
*************************** 5. row ***************************
Table: index_tab01
Non_unique: 1
Key_name: index_02
Seq_in_index: 1
Column_name: col01
Collation: NULL
Cardinality: NULL
Sub_part: NULL
Packed: NULL
Null:
Index_type: FULLTEXT
Comment:
*************************** 6. row ***************************
Table: index_tab01
Non_unique: 1
Key_name: index_02
Seq_in_index: 2
Column_name: col02
Collation: NULL
Cardinality: NULL
Sub_part: NULL
Packed: NULL
Null: YES
Index_type: FULLTEXT
Comment:
6 rows in set (0.00 sec)
索引删除
DROP INDEX <index_name> ON <tab_name>;
ALTER TABLE <tab_name> DROP PRIMARY KEY;
ALTER TABLE <tab_name> DROP INDEX <index_name>;
mysql> alter table index_tab01 drop primary key;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0 mysql> alter table index_tab01 drop index index_02;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0 mysql> drop index index_01 on index_tab01;
查看索引结构
SHOW INDEX FROM <tab_name>\G
最新文章
- oracle 把一个用户的表结构导入到另一个用户下
- The Datastore
- mysql 开启记录慢查询记录
- C#中同时使用Lambda表达式和递归
- jQuery 源码分析和使用心得 - 文档遍历 ( traversing.js )
- IIS 之 在IIS7、IIS7.5中应用程序池最优配置方案
- 如何选择合适的PHP开发框架
- 解决IE下a标签点击有虚线边框的问题
- ajax的get 和post方式发送请求
- 封装qq分享静态库到cocopod
- django 分页组件
- 【PHP】解析PHP中的数组
- js的字符串代码库及讲解
- 转:ArcGIS API for JavaScript之图层
- linux下如何执行.sh文件 【转】
- python与系统做交互常用的模块和使用方法
- DEPENDS工具和DUMPBIN工具使用
- 编写高质量代码改善C#程序的157个建议——建议132:考虑用类名作为属性名
- 关于input 中 hidden属性在后台作用的实例
- 01-取消文件与svn服务器的关联