-
2020-11-19 19:00:03
一、创建索引
1.PRIMARY KEY(主键索引)
mysql > ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
2.UNIQUE(唯一索引)
mysql > ALTER TABLE `table_name` ADD UNIQUE (`column` )
3.INDEX(普通索引)
mysql > ALTER TABLE `table_name` ADD INDEX index_name ( `column` )
4.FULLTEXT(全文索引)
mysql > ALTER TABLE `table_name` ADD FULLTEXT ( `column` )
5.多列索引(组合索引)
mysql > ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )CREATE TABLE table_name ( ID INT NOT NULL, username VARCHAR(16) NOT NULL, city VARCHAR(50) NOTNULL, age INT NOT NULL );
二、删除索引
删除索引的语法: DROP INDEX [ indexName ] ON mytable;
后面继续更新!
Navicat建立索引
mysql 添加索引语句
更多相关内容 -
MySQL 创建索引(Create Index)的方法和语法结构及例子
2020-09-11 09:22:48MySQL 创建索引(Create Index)的方法和语法结构及例子 -
MYSQL创建索引
2021-04-29 22:52:48创建索引 alter table 数据库add index 索引名称(数据库字段名称) 创建主键索引 PRIMARY KEY(主键索引) ALTER TABLE table_name ADD PRIMARY KEY ( column ) 创建唯一索引 UNIQUE(唯一索引) ALTER TABLE table_...查看索引
- show index from 数据库表名
创建索引
- alter table 数据库add index 索引名称(数据库字段名称)
创建主键索引
PRIMARY KEY(主键索引)
ALTER TABLEtable_name
ADD PRIMARY KEY (column
)创建唯一索引
UNIQUE(唯一索引)
ALTER TABLEtable_name
ADD UNIQUE (column
)创建普通索引
INDEX(普通索引)
mysql>ALTER TABLEtable_name
ADD INDEX index_name (column
)创建全文索引
FULLTEXT(全文索引)
ALTER TABLEtable_name
ADD FULLTEXT ( `col多列索引
ALTER TABLE
table_name
ADD INDEX index_name (column1
,column2
,column3
)
1.普通索引。
这是最基本的索引,它没有任何限制。它有以下几种创建方式:
(1)创建索引:CREATE INDEX indexName ON tableName(tableColumns(length));如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB 和 TEXT 类型,必须指定length,下同。
(2)修改表结构:ALTER tableName ADD INDEX [indexName] ON (tableColumns(length))
(3)创建表的时候直接指定:CREATE TABLE tableName ( […], INDEX [indexName] (tableColumns(length)) ;2.唯一索引。
它与前面的"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:
(1)创建索引:CREATE UNIQUE INDEX indexName ON tableName(tableColumns(length))
(2)修改表结构:ALTER tableName ADD UNIQUE [indexName] ON (tableColumns(length))
(3)创建表的时候直接指定:CREATE TABLE tableName ( […], UNIQUE [indexName] (tableColumns(length))查看索引
show index from tableName; -
MYSQL创建索引全过程
2014-03-28 11:46:37代码复制粘贴 改下里面的参数 就可以用 而且参数 也有说明 简单易懂 -
mysql创建索引三种方式
2020-12-21 14:56:531. 新建表中添加索引 ① 普通索引 create table t_dept( no int not null primary key, name varchar(20) null, sex varchar(2) null, info varchar(20) null, index index_no(no) ) ② 唯一索引 create ...1. 新建表中添加索引
① 普通索引 create table t_dept( no int not null primary key, name varchar(20) null, sex varchar(2) null, info varchar(20) null, index index_no(no) )
② 唯一索引 create table t_dept( no int not null primary key, name varchar(20) null, sex varchar(2) null, info varchar(20) null, unique index index_no(no) )
③ 全文索引 create table t_dept( no int not null primary key, name varchar(20) null, sex varchar(2) null, info varchar(20) null, fulltext index index_no(no)
④ 多列索引 create table t_dept( no int not null primary key, name varchar(20) null, sex varchar(2) null, info varchar(20) null, key index_no_name(no,name) )
2. 在已建表中添加索引
① 普通索引 create index index_name on t_dept(name);
② 唯一索引 create unique index index_name on t_dept(name);
③ 全文索引 create fulltext index index_name on t_dept(name);
④ 多列索引 create index index_name_no on t_dept(name,no)
3. 以修改表的方式添加索引
① 普通索引 alter table t_dept add index index_name(name);
② 唯一索引 alter table t_dept add unique index index_name(name);
③ 全文索引 alter table t_dept add fulltext index_name(name);
④ 多列索引 alter table t_dept add index index_name_no(name,no);
可参考:
https://www.cnblogs.com/shihaiming/p/8529502.html -
Mysql创建索引注意事项
2020-03-08 08:40:39介绍了mysql索引相关的基础知识及索引自身搜索的规则和锁机制,并列了一些创建索引的一些优化策略或小tips...
索引的基础:
- 索引就相当于一本书的目录,目的是快速定位数据
- 索引真正的价值是使用了索引的树搜索功能,而不是全表或全索引扫描,有效减少了扫描行数
- mysql是索引组织表,即数据本身是存储在主键索引的叶子节点的,如果表没有定义主键,系统也会创建一个隐藏的默认主键
- 索引的存储结构都是B+树,等值查询的时间复杂度都是log(N),B+树是有序存储,叶子节点之间也有指针
- 写入慢查询的标准是Sql执行时间跟long_query_time比较,如果执行时间超过long_query_time就会认为是一个慢查询,然后写入慢查询日志,这个时间默认是10s,一般线上业务会设置为1s,甚至更短
- 多使用explain来分析自己的Sql,其中rows字段的内容是预计扫描行数,不是一个精确或准确的值,这个值是mysql通过采样统计得到的
- 要关注扫描行数而不是是否使用索引,如果使用了索引还是进行了全表扫描或全索引扫描,那索引的价值也没有发挥出来
- 主键索引默认是AUTO_INCREMENT,其是从auto_increment_offset开始,步长为auto_increment_increment,默认两个值都是1
- 主键索引值并非一定按照步长连续增加,可能由于写入失败、写入回滚及使用insert … select等原因导致不连续,其中insert…select在申请自增值时会预留多个,用不完浪费掉的就是空隙
- 自增值到达数值类型的最大值之后会保持不变,因此再次写入会引发主键冲突
- 优化器在选择索引时候会基于扫描行数、是否使用临时表及是否排序等规则综合判断后,来决定是否使用索引以及使用哪个索引。
- 事务有4种隔离机制,从宽到严分别是读未提交(read uncommitted)、读提交(read committed)、可重复读(repeatable read)、串行化(serializable),最常用是读提交和可重复读,可通过变量’transaction_isolation’查看或修改当前隔离级别
- 默认有两种日志redo log和binlog,redo log是innodb引擎的日志,缓存了需要磁盘io的数据,可以减少磁盘操作,也方便实现故障恢复,binlog是Server层的日志,可以给所有引擎共用的逻辑日志,两种日志通过两阶段提交策略实现记录和同步。
索引的规则:
- 覆盖索引:普通索引的叶子节点存储的是主键值,如果要查询的内容不止是主键值,需要回表操作,即得到主键值之后还需要到主键索引进行查找得到记录值
- 最左前缀原则:利用最左前缀原则为最常用查询创建索引,来减少索引的个数,从而减少mysql开销
- 索引下推:mysql5.6之后引入了索引下推优化,相当于对联合索引做了查询优化,减少了回表操作,即对索引种包含的字段先做判断,直接过滤掉不满足条件的记录。
- 普通索引在命中记录后,会查找下一个,直到找到不满足条件的记录,而唯一索引在命中后直接返回
- 普通索引的更新会使用change buffer缓存结果,而不是每次更改都写入磁盘,因此对于时效不强的数据尽可能使用普通索引而非唯一索引
索引的优化策略:
- 对于较长字符串的列的查询,可以考虑使用mysql5.7引入的虚拟列来创建索引
- 对于双M主备结构,auto_increment_increment可以都设置为2,一个写奇数一个写偶数,防止两个库的主键冲突
- 写入较多的情况下,主键数据类型可以设置为big int,有8个字节,上限可以到达264-1
- 对于比较大的表做查询,可以考虑使用临时表,然后给临时表创建索引
- 对于字符串字段可以创建前缀索引来节省空间,前缀长度可以使用count(distinct)来判断,尽可能高区分度
- 对于区分度不打的字符串,可以考虑使用逆序存储或者hash值索引,这种方法仅适用等值查找,范围扫描会导致全索引扫描
- 有时mysql的优化器会选错索引,可以使用force index来强制指定索引,也可以通过修改语句来引导优化器,当然也可以直接增加或删除索引来避免,也可以使用analyze table [表名]重新统计索引信息后再执行
- 在使用join时要使用被驱动表的索引(使用了NLJ算法),尽可能让小表(满足条件的数据量相对较小的表)做驱动表,因为被驱动表的索引查找可以最大限度减少查询次数
- explain看到join语句的Extra中有Block Nested Loop(BNL)时表示被驱动表做了全表扫描,要避免这种写法,如果无法避免,则join_buffer_size可以设大一点让驱动表的数据可以加载多一点,从而减少被驱动表全表扫描的次数(因为join_buffer一次放不下驱动表数据时,会分多次装入后跟被驱动表的全表数据做对比)
索引的锁机制
- 默认加锁的基本单位是next-key锁,next-key锁本身是前开后闭的
- 查找过程中访问到的对象才会加锁,访问到就会加锁
- 索引上的等值查询,给唯一索引加锁时,next-key会退化为行锁(innodb)
- 索引上的等值查询,向右遍历且最后一个值不满足等值条件时,next-key会退化为区间锁(前开后开)
- 索引默认向后遍历,如果有order by … desc字段要求逆序排列,则会从后向前遍历
转自:https://www.zhenxiangsimple.com/2020/03/07/tech/mysql-index/
-
mysql 添加索引 mysql 如何创建索引
2020-09-11 00:02:18本文将介绍mysql 如何创建索引,需要的朋友可以参考下 -
MySQL 创建索引及使用时的注意事项
2021-01-18 18:53:571、在什么字段上创建索引在经常出现于where条件中,以及orderby子句中的字段上创建索引,根据业务,可创建组合索引。2、mysql 索引设计需要注意的点(1)业务上具有唯一特性的字段,即使是多个字段的组合,也必须创建... -
mysql创建索引的时候支持字段的desc排序方式吗
2020-05-09 19:27:23MySql创建索引时百支持ASC或DESC排序。 下面举例 创建表时同时度创建索知引降序排序(sname 字段上普通道索引降序) create table tbl1 ( id int unique, sname varchar(50), index tbl1_index_sname(sname desc) ); ... -
MySQL创建索引导致锁及表锁阻塞查询
2019-08-28 11:17:45一:场景 -- 原有表结构' CREATE TABLE `leyangjun_user_test` ( ... 3:如果有慢查询 -> 只有慢查询结束了之后,才能创建索引和其他的操作 注意:DDL操作尽量在业务低峰时候操作,以免影响正常业务 -
mysql 创建索引时1071错误
2019-04-03 09:32:07再给已有表添加唯一索引时一直添加不上,一直报错1071,通过查阅资料才知道是因为字段长度过大问题 可参考 https://blog.csdn.net/z404739140/article/details/83384830 https://blog.csdn... -
MySql 创建索引原则
2015-12-27 15:41:12为了使索引的使用效率更高,在创建索引时,必须考虑在哪些字段上创建索引和创建什么类型的索引。本小节将向读者介绍一些索引的设计原则。 1.选择唯一性索引 唯一性索引的值是唯一的,可以更快速的通过该索... -
MySQL创建索引(CREATE INDEX)
2021-01-19 00:13:10基本语法MySQL 提供了三种创建索引的方法:1) 使用 CREATE INDEX 语句可以使用专门用于创建索引的 CREATE INDEX 语句在一个已有的表上创建索引,但该语句不能创建主键。语法格式:CREATE ON ( [] [ ASC | DESC])语法... -
mysql 创建索引、删除索引、查看索引sql语句
2020-10-05 15:47:45在执行CREATE TABLE语句时可以创建索引,也可以单独用CREATE INDEX或ALTER TABLE来为表增加索引。 1.ALTER TABLE ALTER TABLE用来创建普通索引、UNIQUE索引或PRIMARY KEY索引。 ALTER TABLE table_name ADD INDEX ... -
MySQL创建索引、重建索引、查询索引、删除索引
2021-01-18 23:41:121、创建索引 索引的创建可以在CREATE TABLE语句中进行,也可以单独用CREATE INDEX或ALTER TABLE来给表增加索引。以下命令语句分别展示了如何创建主键索引(PRIMARY KEY),联合索引(UNIQUE)和普通索引(INDEX)的方法。 ... -
MySQL中如何创建索引
2022-05-02 14:46:11添加索引: 1.添加主键: alter table tableName add primary key(columnName); 2.添加唯一索引 alter table tableName add unique indexName(columnName); 3.添加普通索引 alter table tableName add index ... -
SQL CREATE INDEX (mysql 创建索引)语句
2020-09-11 18:36:33SQL CREATE INDEX (mysql 创建索引)语句 ** 1.创建普通索引 SQL CREATE INDEX 语法 在表上创建一个简单的索引。允许使用重复的值: CREATE INDEX index_name ON table_name (column_name) 注释:“column_name” ... -
MySQL 创建索引、修改索引、删除索引的命令语句
2015-12-27 15:43:17MySQL创建索引 由于数据量的不断增大,在使用MySql查询时速度愈来愈慢,这时候有必要创建合适的索引来优化提升查询的速度。 -
mysql 中 创建索引很慢,怎么解决
2021-01-19 20:01:14(我没有设置 innodb_flush_log_at_trx_commit 不知道如果设置了 会是什么结果) 我之前是 先导入文件在创建索引。。。四分钟左右搞定!!!但是这样。。创建索引的时候很慢。。。 对我有用[0]丢个板砖[0]引用举报管理... -
MySQL——索引的创建与删除
2022-02-24 09:58:56文章目录MySQL——索引的创建与删除1、创建索引的三种方式1.1、建表时创建索引1.2、修改表时创建索引1.3、使用 CREATE INDEX 语句创建索引2、删除索引 MySQL——索引的创建与删除 1、创建索引的三种方式 1.1、建表时... -
mysql创建索引以及进程过程中出现的问题
2017-11-09 22:45:09同事再给一个表(400w+)添加索引的时候,索引添加失败,错误认为添加的索引没有起作用,又删除了,结果可能把另外一个索引删除了,导致mysql锁表,进程加多,线上访问导致缓慢。然后不断去kill进程id,但是不起作用,... -
mysql创建索引方式
2019-06-29 19:11:48在执行CREATE TABLE语句时可以创建索引,也可以单独用CREATE INDEX或ALTER TABLE来为表增加索引。 1.ALTER TABLE ALTER TABLE用来创建普通索引、UNIQUE索引或PRIMARY KEY索引。 ALTER TABLE table_name ADD ... -
MySQL 创建索引和索引效率验证
2019-10-27 17:41:44MySQL 创建索引和索引效率验证 对于一张存储数据的表来说,通常来说数据量会很大。 项目中总会有一些表数据量非常大,并且在使用过程中,需要频繁地到这些表中查询数据。 数据量大的时候,查询速度会明显变慢,这... -
MySQL:创建索引如果不存在
2021-01-28 05:47:21要记住两件事:无论如何创建索引您可以生成索引,以便创建索引而不检查索引是否提前存在.例如,您可以运行以下命令:ALTER TABLE table_name ADD INDEX (column_to_index);ALTER TABLE table_name ADD INDEX (column_... -
MySQL的索引类型及创建索引
2019-03-05 14:04:27MySQL目前主要有以下几种索引类型: 1.普通索引 2.唯一索引 3.主键索引 4.组合索引 5.全文索引 二、语法 CREATE TABLE table_name[col_name data type] [unique|fulltext][index|key][index_name](col_name... -
MySQL下创建索引的三种方式
2021-02-05 09:52:30MySQL各版本,对于add Index的处理方式是不同的,主要有三种:(1)Copy Table方式这是InnoDB最早支持的创建索引的方式。顾名思义,创建索引是通过临时表拷贝的方式实现的。新建一个带有新索引的临时表,将原表数据... -
mysql 创建索引后,查询速度没有提升
2018-04-10 10:33:30直接上结论:mql查询语句的where条件字段和select查询字段需要在同一个索引...我们项目使用mysql作为数据库,在单表达到百万级别以后,经常发现大表查询速度难以忍受,达到半分钟到5分钟左右。尝试在大表添加了索引...