mysql创建索引

MySQL 数据库索引详解

◇◆丶佛笑我妖孽 提交于 2019-12-01 13:32:07
什么是索引 索引是对 数据库中一列或者多列的值进行排序的一中结构 ,使用索引可以快速访问数据库中表的特定信息。索引的一个主要的目的就是加快检索表中数据,亦即能协助信息搜索者尽快的找到符合限制条件的记录的辅助数据结构。 简单来说索引就是数据库的目录。 索引有什么作用 索引的最大作用就是加快数据库的查询速度。 索引为什么会加快查询速度 数据库在执行一条SQL语句的时候,默认的方式是根据搜索条件进行全表扫描,遇到匹配条件的就加入搜索结果集合。但若是遇到大数据量的查询时,直接全表匹配的方式太慢了,这时候就需要用到索引。我们对某一字段增加索引,查询的时候就会先去索引列表中一次定位到特定值得行数,大大减少遍历匹配的行数,所以可以明显的增加查询的速度。 索引的种类 主键索引 :数据记录里面不能有null,数据内容不能重复,在一张表里面不能有多个主键索引。 普通索引 :使用字段关键字建立的索引,主要是提高查询速度。 唯一索引 :字段数据是唯一的,数据内容里面能否为null,在一张表里面,是可以添加多个唯一索引。 全文索引 :在早起版本中只有myisam引擎支持全文索引,在innodb5.6后也支持全文索引,在MySQL中全文索引不支持中文。我们一般使用sphinx集合coreseek来实现中文的全文索引。 索引的创建(索引的例子) 执行Create Table语句时可以创建索引

mysql面试题目笔记 <非原创> (作为自己的参考资料)

a 夏天 提交于 2019-12-01 11:58:10
1.主键超键候选键外键是什么? 定义: 超键:在关系中可以唯一标识元组的属性集。 初始键:不包含多余属性的超键。 主键:用户选作元组标识的一个附加键程序主键。 外键:如果关系R中的属性集是关系L中的主键,那么该属性集为关系R的外键。 超键 在关系中能唯一标识元组的属性集称为关系模式的超键。 这样我们从示例中可以发现学号是标识学生实体的唯一标识。那么该元组的超键就为学号。 除此之外我们还可以把它跟其他属性组合起来,比如: ( 学号 , 性别 ) ( 学号 , 年龄 ) 这样也是超键。 初始键 排除多余属性的超键为预期键。 根据示例可知,学号是一个可以唯一标识元组的唯一标识,因此学号是一个附加键,实际上,指向键是超键的子集,而非(学号,年龄)是超键,但是它不是预设键。因为它还有了额外的属性。 主键 用户选择的预设键作为该元组的唯一标识,那么它就以此为主键。 简单的说,示例中的元组的扩展键为学号,但是我们将他作为该元组的唯一标识,那么学号就以此为主。 外键 外键是相对于主键的,某些在学生记录里,主键为学号,在成绩单表中也有学号插入,因此学号为成绩单表的外键,为学生表的主键。 总结 主键为预期键的子集,外部键为超键的子集,而外键的确定是相对于主键的。 2.数据库事务的四个特性: ACID:原子性,一致性,隔离性,持久性。 原子性:数据库的所有操作要么完成,要么全部不完成

《Mysql技术内幕》读书笔记

不打扰是莪最后的温柔 提交于 2019-12-01 11:52:25
第一章 MySql存储引擎 1.Innodb存储引擎 支持事务,其特点是行锁设计、支持外键。 Innodb是Mysql默认的存储引擎。 2.MyISAM存储引擎 MyIsam存储引擎不支持事务和表锁设计,但是支持全文索引。 第五章 索引与算法 1.常见的索引:B+树索引、全文索引、哈希索引。 2.B+树,是通过二叉查找树,再由平衡二叉树,B树演化而来。 二叉查找树 二叉查找树:左子树的值总是小于根的值,右子树的值总是大于根的值。可以通过中序遍历得到值的排序输出。 平均查找速度比顺序查找来得快。 平衡二叉树(AVL树) 平衡二叉树:首先符合二叉查找树的定义,其次必须满足任何节点的两个子树的高度的最大差为1。 B+树 B+树:是为磁盘或其他直接存取辅助设备设计的一种平衡树。 在B+树中,所有记录节点都是按键值对的大小顺序存放在同一层的叶子节点上,由各叶子节点指针进行连接。 优点 :B+树的高度一般都在2--4层。也就是查找某一键值的行记录时最多只需要2--4次IO就可以了。 B+树索引 B+树索引,分为聚集索引和辅助索引。 聚集索引和辅助索引的区别:叶子节点存放的是否是一整行的信息。 聚集索引 聚集索引:就是按照每张表的主键构造一颗B+树,同时叶子节点存放的即为整张表的行记录数据,也将聚集索引的叶子节点称为数据页。 辅助索引 辅助索引:叶子节点并不包含行记录的全部数据

mysql创建索引

◇◆丶佛笑我妖孽 提交于 2019-12-01 11:41:19
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` ) 来源: https://www.cnblogs.com/52py/p/11683603.html

Elasticsearch 7.x 之文档、索引和 REST API 【基础入门篇】

爷,独闯天下 提交于 2019-12-01 11:37:30
前几天写过一篇《Elasticsearch 7.x 最详细安装及配置》,今天继续最新版基础入门内容。这一篇简单总结了 Elasticsearch 7.x 之文档、索引和 REST API。 什么是文档 文档Unique ID 文档元数据 什么是索引 REST API 一、索引文档(Document) 1.1 白话什么是文档 从使用案例出发,Elasticsearch 是面向文档,文档是所有搜索数据的最小单元。 案例一:每个公司都有业务日志平台,比如交易业务日志。 文档:每一条日志文件中的日志项,就是文档 案例二:可以搜索并播放电影的在线视频网站 文档:每一个电影的具体信息,就是文档 案例三:可以搜索并下载文件的云存储网站,类似百度云 文档:每一个文件具体内容信息,就是文档 等等案例很多,那么文档就是类似数据库里面的一条长长的存储记录。文档(Document)是索引信息的基本单位。 文档被序列化成为 JSON 格式,物理保存在一个索引中。JSON 是一种常见的互联网数据交换格式: 文档字段名:JSON 格式由 name/value pairs 组成,对应的 name 就是文档字段名 文档字段类型:每个字段都有对应的字段类型:String、integer、long 等,并支持数据&嵌套 1.2 文档的 Unique ID 每个文档都会有一个 Unique ID,其字段名称为 _id :

Python后端技术栈(六)--数据库

天涯浪子 提交于 2019-12-01 10:19:46
每日分享 What makes you different or weird—that’s your strength. 那些让你与众不同或怪异的,就是你的力量所在。 1.6数据库 上篇文章对网络编程中的一些经典问题做了总结,比如各种网络协议、IO 多路复用模型、并发库等等。 本篇文章将开始数据库的相关内容,开始咯~ 1.6.1 MySQL 1.6.1.1 MySQL 基础知识点 1.事务的原理,特性,事务并发控制 2.常用的字段、含义和区别 3.常用数据库引擎之间区别 1.6.1.2事务 Transaction 1.事务是数据库并发控制的基本单位 2.事务可以看做是一系列 SQL 语句的集合 3.事务的特性就是要么全部执行成功,要么全部执行失败(回滚) 我们最常见的就是转账操作这样一个使用案例。比如 A 给 B 转账,第一步是从 A 的账户查询一下余额还够不够,然后扣款。第二步是 B 的账户里面增加对应的金额。 从代码的层面来说,下面举一个 SQLAlchemy 框架执行回滚操作的例子: session.begin() try: item1 = session.query(Item).get(1) item2 = session.query(Item).get(2) item1.foo = 'bar' item2.bar = 'foo' session.commit()

MySQL性能优化(四)-- MySQL explain详解

删除回忆录丶 提交于 2019-12-01 09:42:53
转载地址: https://juejin.im/post/5d141528e51d4577565367d0 MySQL中的explain命令显示了mysql如何使用索引来处理select语句以及连接表。explain显示的信息可以帮助选择更好的索引和写出更优化的查询语句。 一、格式 explain + select 语句; 例如:explain select * from tb_student; 二、5.5和5.7版本explain的区别 5.7之后的版本默认会有 partitions 和 filtered两列,但是5.5版本中是没有的,需要 使用explain partitions select ……来显示带有partitions 的列, 使用explain extended select ……来显示带有filtered的列。 本文是基于5.5.54版本的。 三、explain的作用 1.描述MySQL如何执行查询操作、执行顺序,使用到的索引,以及MySQL成功返回结果集需要执行的行数。 2.可以帮助我们分析 select 语句,让我们知道查询效率低下的原因,从而改进我们的查询,让查询优化器能够更好的工作 查询优化器的作用: 1.优化select 语句,分析哪些是常量表达式(例如id=1),以及分析哪些表达式可以直接转换成常量的 2.对where条件进行简化和转换,如去掉无用条件

20、索引

江枫思渺然 提交于 2019-12-01 09:28:10
索引 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大 提高 MySQL的 检索速度 。 索引分 单列索引和组合索引 。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。 创建索引时,你需要确保该索引是应用在 SQL 查询语句的条件 (一般作为 WHERE 子句的条件)。 实际上,索引也是一张表,该表保存了 主键与索引字段 ,并指向实体表的记录。 虽然索引大大提高了查询速度,同时却会 降低更新表的速度 ,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。 建立索引会 占用磁盘空间 的索引文件。 1、 普通索引 1.1 创建表的时候直接指定 语法结构: CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX [indexName] (username(length)) ); 实例: create table test5( id int, name varchar(20), index index_id(id) ); create table test5( id int, name varchar(20), index (id,name) );

MYSQL 八大优化方案

筅森魡賤 提交于 2019-12-01 08:43:26
1、选取最适用的字段属性 ​ MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。 例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间,甚至使用VARCHAR这种类型也是多余的,因为CHAR(6)就可以很好的完成任务了。同样的,如果可以的话,我们应该使用MEDIUMINT而不是BIGIN来定义整型字段。 ​ 另外一个提高效率的方法是在可能的情况下,应该尽量把字段设置为NOT NULL,这样在将来执行查询的时候,数据库不用去比较NULL值。 ​ 对于某些文本字段,例如“省份”或者“性别”,我们可以将它们定义为ENUM类型。因为在MySQL中,ENUM类型被当作数值型数据来处理,而数值型数据被处理起来的速度要比文本类型快得多。这样,我们又可以提高数据库的性能。 2、使用连接(JOIN)来代替子查询(Sub-Queries) ​ MySQL从4.1开始支持SQL的子查询。这个技术可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中。例如,我们要将客户基本信息表中没有任何订单的客户删除掉,就可以利用子查询先从销售信息表中将所有发出订单的客户ID取出来,然后将结果传递给主查询

mysql之索引原理

不想你离开。 提交于 2019-12-01 08:03:22
一 初识索引 为什么要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化显然是重中之重。说起加速查询,就不得不提到索引了。 什么是索引? 索引在MySQL中也叫是一种“键”,是存储引擎用于快速找到记录的一种数据结构。索引对于良好的性能 非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要。 索引优化应该是对查询性能优化最有效的手段了。索引能够轻易将查询性能提高好几个数量级。 索引相当于字典的音序表,如果要查某个字,如果不使用音序表,则需要从几百页中逐页去查。 你是否对索引存在误解? 索引是应用程序设计和开发的一个重要方面。若索引太多,应用程序的性能可能会受到影响。而索引太少,对查询性能又会产生影响,要找到一个平衡点,这对应用程序的性能至关重要。一些开发人员总是在事后才想起添加索引----我一直认为,这源于一种错误的开发模式。如果知道数据的使用,从一开始就应该在需要处添加索引。开发人员往往对数据库的使用停留在应用的层面,比如编写SQL语句、存储过程之类,他们甚至可能不知道索引的存在,或认为事后让相关DBA加上即可。DBA往往不够了解业务的数据流,而添加索引需要通过监控大量的SQL语句进而从中找到问题