MySQL快查
因为在日常工作学习中经常忘记mysql的一些语句、关键字、操作等内容,所以最近抽取时间写了以下关于mysql相关内容。相当于一本字典吧
索引
- MySQL快查
- 简介
- 创建索引
- create index创建索引
- alter table创建索引
- 创建表的时候指定索引
- 查看索引
- 删除索引
- 更多
简介
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。
索引的一个主要目的就是加快检索表中数据,亦即能协助信息搜索者尽快的找到符合限制条件的记录ID的辅助数据结构。
例如这样一个查询:select * from table1 where id=10000。如果没有索引,必须遍历整个表,直到ID等于10000的这一行被找到为止;有了索引之后(必须是在ID这一列上建立的索引),即可在索引中查找。由于索引是经过某种算法优化过的,因而查找次数要少的多。可见,索引是用来定位的。
索引只应在数据量大,并且对表的查询多而更新少的数据表上创建;在经常需要排序、分组、联合操作的表上要建索引。
如果是经常要更新内容(insert、update、delete)的表则应避免使用索引;重复记录多的表不宜创建索引。
创建索引
create index创建索引
CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX 索引名
[USING {BTREE | HASH}]
ON 表名 (列名 [(长度)] [ASC | DESC],...)
unique:唯一索引,指定unique索引的列的值必须是唯一的,允许空值。如果是组合索引则组合必须唯一。
fulltext:全文索引,制定fulltext索引的列支持值的全文查找,允许重复值和空值。
spatial:空间索引,对数据类型是MySQL支持的4种空间数据类型geometry、point、linestring和polygon的字段建立的索引。
普通索引:不指定上面的关键字的索引(只写create index)。是mysql中的基本索引,允许重复值和空值。
主键索引:使用关键字primary key的列会生成主键索引,不允许空值和重复值。
索引名:为创建的索引取的名字
using {btree | hash}:使用的索引类型,不写默认是btree
列名[(长度)]:指定对那个列(字段)生成索引;后面可选的长度是指定使用该字段中值前n(长度)个字符当作索引,不写则使用字段值的全部字符。
一般来说,指定长度是为了让生成的索引文件占用空间更小。
指定长度的话会比使用全字符的索引速度慢一些。
如果列中前n(长度)个字符是不同的,则这种指定长度的索引比使用全部字符的索引速度不会差别太大。
[asc | desc]:升序还是降序
# 举例
# 给user表的name字段创建一个普通索引
create index name_index on user (name);
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
alter table创建索引
alter table 表名
add [unique | ...] index [索引名](列名[(长度)] [{asc | desc}],...);
# 为commodity表中的name字段创建一个降序的普通索引
alter table commodity
add index (name(10) desc);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
创建表的时候指定索引
# 创建一个test_table表,并为id字段创建主键索引,
# 为tel字段创建唯一索引
# 为height,weight字段创建组合普通索引
create table test_table(
id int,
name char(10),
tel char(11),
height int,
weight int,
primary key (id),
unique index (tel),
index (height,weight)
);
Query OK, 0 rows affected (0.02 sec)
查看索引
show index from 表名;
# 查看表test_table的索引
show index from test_table;
表名 是否不是唯一值 索引名 索引中的序列号 列(字段)名 列在索引中的存储方式 索引在唯一 。。。。 索引类型 。。。。
A:升序 NULL:无分类 值的数据的
估值
+------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| test_table | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | | YES | NULL |
| test_table | 0 | tel | 1 | tel | A | 0 | NULL | NULL | YES | BTREE | | | YES | NULL |
| test_table | 1 | height | 1 | height | A | 0 | NULL | NULL | YES | BTREE | | | YES | NULL |
| test_table | 1 | height | 2 | weight | A | 0 | NULL | NULL | YES | BTREE | | | YES | NULL |
+------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
4 rows in set (0.00 sec)
删除索引
# 方法一
drop index 索引名 on 表名;
# 方法二
alter table 表名 drop index 索引名;