mysql 廖雪峰_关系模型 - 索引 - 《廖雪峰 SQL教程(MySQL)》 - IT Book
索引
在关系数据库中,如果有上万甚至上亿条记录,在查找记录的时候,想要获得非常快的速度,就需要使用索引。
索引是关系数据库中对某一列或多个列的值进行预排序的数据结构。通过使用索引,可以让数据库系统不必扫描整个表,而是直接定位到符合条件的记录,这样就大大加快了查询速度。
例如,对于students表:
idclass_idnamegenderscore11小明M90
21小红F95
31小军M88
如果要经常根据score列进行查询,就可以对score列创建索引:
ALTER TABLE students
ADD INDEX idx_score(score);
使用ADD INDEX idx_score (score)就创建了一个名称为idx_score,使用列score的索引。索引名称是任意的,索引如果有多列,可以在括号里依次写上,例如:
ALTER TABLE students
ADD INDEX idx_name_score(name,score);
索引的效率取决于索引列的值是否散列,即该列的值如果越互不相同,那么索引效率越高。反过来,如果记录的列存在大量相同的值,例如gender列,大约一半的记录值是M,另一半是F,因此,对该列创建索引就没有意义。
可以对一张表创建多个索引。索引的优点是提高了查询效率,缺点是在插入、更新和删除记录时,需要同时修改索引,因此,索引越多,插入、更新和删除记录的速度就越慢。
对于主键,关系数据库会自动对其创建主键索引。使用主键索引的效率是最高的,因为主键会保证绝对唯一。
唯一索引
在设计关系数据表的时候,看上去唯一的列,例如身份证号、邮箱地址等,因为他们具有业务含义,因此不宜作为主键。
但是,这些列根据业务要求,又具有唯一性约束:即不能出现两条记录存储了同一个身份证号。这个时候,就可以给该列添加一个唯一索引。例如,我们假设students表的name不能重复:
ALTER TABLE students
ADD UNIQUE INDEX uni_name(name);
通过UNIQUE关键字我们就添加了一个唯一索引。
也可以只对某一列添加一个唯一约束而不创建唯一索引:
ALTER TABLE students
ADD CONSTRAINT uni_name UNIQUE(name);
这种情况下,name列没有索引,但仍然具有唯一性保证。
无论是否创建索引,对于用户和应用程序来说,使用关系数据库不会有任何区别。这里的意思是说,当我们在数据库中查询时,如果有相应的索引可用,数据库系统就会自动使用索引来提高查询效率,如果没有索引,查询也能正常执行,只是速度会变慢。因此,索引可以在使用数据库的过程中逐步优化。
小结
通过对数据库表创建索引,可以提高查询速度。
通过创建唯一索引,可以保证某一列的值具有唯一性。
数据库索引对于用户和应用程序来说都是透明的。
读后有收获可以支付宝请作者喝咖啡
mysql 廖雪峰_关系模型 - 索引 - 《廖雪峰 SQL教程(MySQL)》 - IT Book相关推荐
- mongodb mysql 知乎_为什么 MongoDB 索引选择B-树,而 Mysql 索引选择B+树(精干总结)...
本文献给准备面试或者是还在面试的你.常见面试题,送分题目,不拿白不拿.本文收录在个人博客<愚公要移山>中,地址 www.javachat.cc 这篇是修改版,针对知乎上很多人提出的问题,进 ...
- 视频教程-19全新mysql教程零基础入门实战精讲mysql视频DBA数据库视频教程SQL教程-MySQL
19全新mysql教程零基础入门实战精讲mysql视频DBA数据库视频教程SQL教程 7年的开发架构经验,曾就职于国内一线互联网公司,开发工程师,现在是某创业公司技术负责人, 擅长语言有node/ja ...
- mysql第三章关系模型_一个MySQL关系模型只有三个关系(二维表)组成。_学小易找答案...
[判断题]DELETE语句功能是对表中所有记录或满足条件的记录进行批量删除. [填空题]The computer's entire ____ was on a single board. [单选题]下 ...
- mysql内存淘汰_从创建索引过程中内存变化来看SQL Server与MySQL的内存淘汰算法
在sqlserver中,几年之前就注意到一个现象:sqlserver中对一个大表创建索引或者rebuild索引的过程中,会引起内存剧烈的动荡,究其原因为何,这种现象到底正不正常,是不是sqlserve ...
- mysql 帮助命令_一篇文章帮你搞定所有MySQL命令!
MySQL的基本操作可以包括两个方面:MySQL常用语句如高频率使用的增删改查(CRUD)语句和MySQL高级功能,如存储过程,触发器,事务处理等.而这两个方面又可以细分如下: MySQL常用语句 表 ...
- mysql sqlserver对比_很用心的写了 9 道 MySQL 面试题
MySQL 一直是本人很薄弱的部分,后面会多输出 MySQL 的文章贡献给大家,毕竟 MySQL 涉及到数据存储.锁.磁盘寻道.分页等操作系统概念,而且互联网对 MySQL 的注重程度是不言而喻的,后 ...
- mysql拉荐_荐 一步一步教你MySQL主从复制读写分离
本次我们通过docker搭建环境 虚拟机搭建对机器配置有要求,并且安装mysql步骤繁琐 一台机器上可以运行多个Docker容器 Docker容器之间相互独立,有独立ip,互不冲突 Docker使用步 ...
- mysql更新加锁_一条简单的更新语句,MySQL是如何加锁的?
看如下一条sql语句: #tableT(idint,namevarchar(20))deletefromTwhereid=10: MySQL在执行的过程中,是如何加锁呢? 再看下面这条语句: sele ...
- 阿里云安装数据库mysql数据库服务器_阿里云CentOs服务器 安装与配置mysql数据库...
Linux 安装mysql 数据库 一下为mysql 安装教程 Using username"root". Last login: Tue Oct8 09:30:34 2019 f ...
最新文章
- 该应用程序可能在其主线程上做过多的工作
- 上海网络推广浅析一个优质的404页面能给网站带来什么优化效果?
- RAID技术详细解答之一:入门基础篇
- C#流程控制语句--跳转语句(break,continue,goto,return,)
- Linux(12)-命令行的使用,shell脚本
- 整洁架构之道--三种经典的编程范式
- 吃鱼还是吃肉 (10 分)
- Thinkpad p15 gen1安装双系统遇到的问题
- instanceof应用场景 instanceof一般用于对象类型强制转换
- Hybrid 接口应用
- Java虚拟机类加载机制浅谈
- 85 缓存, 验证码 序列化
- ionCube 安装
- 域名和IP地址的区别
- ts类型声明文件的正确使用姿势
- 【小家java】Java中主线程(父线程)与子线程的通信和联系
- SDRAM中的DQM
- wireshark找不到捕获接口问题和net start npf 服务器名无效、拒绝访问的解决办法
- 计算机教室报损登记簿,瑞安市第四中学
- python常见运算符