MySQL 索引

MySQL 索引MySQL 索引

大家好,又见面了,我是你们的朋友全栈君。

索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。

优点:
  • 索引大大提高了查询速度
缺点:
  • 降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。
  • 因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。建立索引会占用磁盘空间的索引文件。
普通索引:
  1. 创建索引
    这是最基本的索引,它没有任何限制。它有以下几种创建方式:
    如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length。
CREATE INDEX indexName ON mytable(username(length)); 
  1. 修改表结构(添加索引)
ALTER table tableName ADD INDEX indexName(columnName)
  1. 创建表的时候直接指定
CREATE TABLE mytable(  
 
ID INT NOT NULL,   
 
username VARCHAR(16) NOT NULL,  
 
INDEX [indexName] (username(length))  
 
);  
  1. 删除索引的语法
DROP INDEX [indexName] ON mytable; 
唯一索引:

它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:

  1. 创建索引
CREATE UNIQUE INDEX indexName ON mytable(username(length)) 

上面这样情况下创建的是非聚集索引,它和使用NONCLUSTERED(nonclustered)关键字效果是一样的。

CREATE UNIQUE NONCLUSTERED INDEX  indexName  ON mytable(username(length))

如果要创建聚集索引,可使用关键字clustered,代码如下:

CREATE UNIQUE CLUSTERED INDEX  indexName  ON mytable(username(length))

聚集索引和非聚集索引-详解

  1. 修改表结构
ALTER table mytable ADD UNIQUE [indexName] (username(length))
  1. 创建表的时候直接指定
CREATE TABLE mytable(  
 
ID INT NOT NULL,   
 
username VARCHAR(16) NOT NULL,  
 
UNIQUE [indexName] (username(length))  
 
);  
使用ALTER 命令添加和删除索引

有四种方式来添加数据表的索引:

该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。
ALTER TABLE tbl_name ADD PRIMARY KEY (column_list): 

 这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。
ALTER TABLE tbl_name ADD UNIQUE index_name (column_list):

添加普通索引,索引值可出现多次。
ALTER TABLE tbl_name ADD INDEX index_name (column_list): 

该语句指定了索引为 FULLTEXT ,用于全文索引。
ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):

事例

添加索引
mysql> ALTER TABLE testalter_tbl ADD INDEX (c);

删除索引
mysql> ALTER TABLE testalter_tbl DROP INDEX c;
使用 ALTER 命令添加和删除主键

主键只能作用于一个列上,添加主键索引时,你需要确保该主键默认不为空(NOT NULL)。实例如下:

mysql> ALTER TABLE testalter_tbl MODIFY i INT NOT NULL;
mysql> ALTER TABLE testalter_tbl ADD PRIMARY KEY (i);

你也可以使用 ALTER 命令删除主键:

mysql> ALTER TABLE testalter_tbl DROP PRIMARY KEY;
显示索引信息
mysql> SHOW INDEX FROM table_name; \G

问题:建立唯一索引前,数据中存在重复的记录?

ALTER IGBORE TABLE TABLE ADD UNIQUE index_name (column_list);

删除重复的记录,保留一条

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/105840.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • UNIX的常用命令「建议收藏」

    UNIX的常用命令「建议收藏」Unix常用命令介绍:  多命令行:“;”多行命令:“\”1、系统关闭reboot、halt/shutdown、poweroff2、passwd命令:修改系统用户密码passwd[username]3、su命令:切换系统用户su[-username]username为空表示root用户4、cat命令:将指定的文件在标准输出到显示器cat [-AbET] [文件名列表]-A      …

  • 多吃碱性食物 远离癌症

    多吃碱性食物 远离癌症

  • 在Android手机上对https请求进行抓包

    在Android手机上对https请求进行抓包前段时间跟QQ群里的群友聊天时无意聊到了抓包的话题。抓包可以说是程序员日常开发调试问题的一个重要手段,可以帮助我们理清客户端与服务器之间的数据传输问题,以便于甩锅。在过去,网络请求基本都是靠的http协议,那个时候的抓包是一件非常简单的事情。然而这几年,http协议在逐渐被淘汰,几乎所有的网络请求都变成了https协议,这就使事情变得复杂了。群里一位朋友说,https是不可能被抓包的,不然怎么保证https传输的安全性,毕竟那么多大公司都在用这个协议来传输重要的数据。这其实是一个比较有意思的话题

  • CentOS7修改IP地址后无法ping通问题记录[通俗易懂]

    CentOS7修改IP地址后无法ping通问题记录在键入ifconfigenp0s3192.168.56.2后,在cmd中无法ping通此IP地址解决办法:键入sudoifconfigenp0s3192.168.56.2

  • 博客园博客背景图片设置

    博客园博客背景图片设置首先在博客园后台管理页面的相册上传自己想要设置背景的图片:上传完成之后点击该图片进去:看到大图再通过控制台获取路径然后转到设置:加上如下代码:最后效果:

  • NAS备份, NDMP

    NAS备份, NDMP

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号