MySQL快查-索引

MySQL快查

因为在日常工作学习中经常忘记mysql的一些语句、关键字、操作等内容,所以最近抽取时间写了以下关于mysql相关内容。相当于一本字典吧


重置mysql密码
数据类型
运算符
常用函数
数据完整性
数据库的基本操作
对表本身的操作
对表中数据的操作
子查询
多表连接
本文
视图
预处理SQL语句
自定义函数与存储过程
在MySQL中编程


简介

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。
索引的一个主要目的就是加快检索表中数据,亦即能协助信息搜索者尽快的找到符合限制条件的记录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种空间数据类型geometrypointlinestringpolygon的字段建立的索引。
普通索引:不指定上面的关键字的索引(只写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 索引名;

更多

create index

猜你喜欢

转载自blog.csdn.net/weixin_45345384/article/details/117134271