MySQL 索引

MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。

打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。

拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序的目录(索引)快速查找到需要的字。

索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。

创建索引时,你需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。

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

上面都在说使用索引的好处,但过多的使用索引将会造成滥用。因此索引也会有它的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。

建立索引会占用磁盘空间的索引文件。

普通索引

创建索引

这是最基本的索引,它没有任何限制。它有以下几种创建方式: CREATE INDEX indexName ON mytable(username(length));

如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length。

修改表结构(添加索引) ALTER table tableName ADD INDEX indexName(columnName)

创建表的时候直接指定 CREATE TABLE mytable(

ID INT NOT NULL,

username VARCHAR(16) NOT NULL,

INDEX [indexName] (username(length))

);

删除索引的语法 DROP INDEX [indexName] ON mytable;

唯一索引

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

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

修改表结构 ALTER table mytable ADD UNIQUE [indexName] (username(length))

创建表的时候直接指定 CREATE TABLE mytable(

ID INT NOT NULL,

username VARCHAR(16) NOT NULL,

UNIQUE [indexName] (username(length))

);

使用ALTER 命令添加和删除索引

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

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

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

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

以下实例为在表中添加索引。 mysql> ALTER TABLE testalter_tbl ADD INDEX (c);

你还可以在 ALTER 命令中使用 DROP 子句来删除索引。尝试以下实例删除索引: 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;

删除主键时只需指定PRIMARY KEY,但在删除索引时,你必须知道索引名。

显示索引信息

你可以使用 SHOW INDEX 命令来列出表中的相关的索引信息。可以通过添加 \G 来格式化输出信息。

尝试以下实例: mysql> SHOW INDEX FROM table_name; \G

........

mysql程序设计教程_MySQL教程_编程入门教程_牛客网相关推荐

  1. 牛客网数据开发题库_练习SQL利器,牛客网SQL实战题库

    牛客网SQL实战网址:https://www.nowcoder.com/ta/sql 持续更新--记录自己在牛客网SQL的做题过程 更新进度:61题,2019-4-3,更完了 1.查找最晚入职员工的所 ...

  2. 超适合初学者刷的170道C基础编程题 选自牛客网 个人超详细解析(有彩蛋哟~)

    在最开始先简单说下为什么刷题,可能大家在刚开始学的时候认识不到动手或者认识到但并不知道刷题的重要性.简单来说即十分巩固当前知识,让学到脑子里的知识学以致用.其次一点就是在最开始不再担心写代码的恐惧,认 ...

  3. python入门教程非常详细-Python编程入门教程:从入门到高级,非常详细

    本文的资料和内容是我下载的,觉得非常有用,于是转过来大家瞧瞧: 这里给初学Python的朋友提供一些建议和指导吧.大神请无视, 俗话说:授人以鱼不如授人以渔.所以我这里只是阐述学习过程,并不会直接详细 ...

  4. python教程很详细_Python编程入门教程:从入门到高级,非常详细

    本文的资料和内容是我下载的,觉得非常有用,于是转过来大家瞧瞧: 这里给初学Python的朋友提供一些建议和指导吧.大神请无视, 俗话说:授人以鱼不如授人以渔.所以我这里只是阐述学习过程,并不会直接详细 ...

  5. python入门教程 非常详细-Python编程入门教程:从入门到高级,非常详细

    本文的资料和内容是我下载的,觉得非常有用,于是转过来大家瞧瞧: 这里给初学Python的朋友提供一些建议和指导吧.大神请无视, 俗话说:授人以鱼不如授人以渔.所以我这里只是阐述学习过程,并不会直接详细 ...

  6. python3.72教程_python3教程_编程入门教程_牛客网

    Python3 命令行参数 Python 提供了 getopt 模块来获取命令行参数. $ python test.py arg1 arg2 arg3 Python 中也可以所用 sys 的 sys. ...

  7. 【SQL取数练习,入门篇】牛客网SQL入门板块个人练习,含sql文件,复习必备

    文章目录 数据表介绍1: 练习1:入门(简单) 数据表介绍2: 练习2:入门(基础) 入门(文本) 数据表介绍1: 用户信息表:user_profile 其中device_id指终端编号(每个用户有唯 ...

  8. [编程题]有假币 - 牛客网题解

    居然有假币! 现在猪肉涨了,但是农民的工资却不见涨啊,没钱怎么买猪肉啊.nowcoder这就去买猪肉,结果找来的零钱中有假币!!!可惜nowcoder 一不小心把它混进了一堆真币里面去了.只知道假币的 ...

  9. 华为机试python编程题_牛客网华为机试题之Python解法

    牛客网华为机试题之Python解法 第1题 字符串最后一个单词的长度 a = input().split(" ") print(len(a[-1])) 第2题 计算字符个数 a = ...

最新文章

  1. 获取weblogic上指定文件的路径 java_项目部署到WebLogic文件路径访问不正确
  2. 论坛报名 | 从捉迷藏、星际争霸到新一代人工智能:多智能体深度强化学习的理论与实践...
  3. 图片二进制编码_python3从零学习-5.7.4、quopri编码与解码经过MIME转码打印数据
  4. Java多线程之间访问实例变量
  5. java存储三元组_在4store中添加三元组
  6. 解决MWPhotoBrowser中的SDWebImage加载大图导致的内存警告问题
  7. 按钮 交互_SwiftUI中的微交互—菜单按钮动画
  8. Linux学习之C语言的进程与线程编程
  9. UIWebView与JavaScript的交互
  10. 弹框alertView
  11. python是由哪个人创造的文字_楔形文字是由什么人创造的
  12. 论文的中期报告怎么写?
  13. BCH采用大爆发,支付理念深入人心
  14. 什么是EasyUI,如何使用EasyUI?--easyui的十二种用法
  15. Excel 和Word 常用小技巧
  16. 计算机课里的余数是什么,余数
  17. 13个创意爆棚的广告图片
  18. 中国电信5G技术缩略语
  19. Java基础知识小练习合集
  20. 3600000毫秒等于多少小时_科学家解密!你知道月球上一天等于地球上多久吗?...

热门文章

  1. C++虚继承中构造函数和析构函数顺序问题以及原理
  2. web开发要学多久,HTML表格标签,薪资翻倍
  3. CSS的三种定位,月薪30K
  4. java client_java中HttpClient的使用
  5. 2018-2019-1 20165231 实验四 外设驱动程序设计
  6. BZOJ4890 Tjoi2017城市
  7. composer 更改为中国镜像
  8. 浅析STM32之usbh_def.H
  9. PHP 小数点保留两位【转】
  10. UOJ #150 【NOIP2015】 运输计划