MyISAM

MySQL-快速入门(7)索引

天涯浪子 提交于 2020-03-26 09:23:50
1、什么是索引 索引是对数据库表中一列或者多列的值进行排序的一种结构。索引是在存储引擎中实现的,每种存储引擎中的索引不一定完全相同。 MySQL中索引的存储类型有两种:btree和hash。MyISAM和InnoDB存储引擎只支持btree索引;MEMORY / HEAP存储引擎可以支持hash和btree索引。 2、索引的分类 1》普通索引和唯一索引: 2》单列索引和组合索引: 3》全文索引:fulltext,可以在char、varchar、text类型的列上创建全文索引。MySQL只有MyISAM存储引擎支持全文索引。 4》空间索引:spatial,MySQL中的空间数据类型有4种,分别是geometry、point、linesstring、polygon。创建空间索引的列必须将其声明为not null。并且只有MyISAM存储引擎支持这种索引的创建。 3、索引的设计原则 1》索引并非越多越好,动态索引维护需要花销 2》避免对经常更新的表建立过多的索引 3》数据量小的表最好不要建立索引 4》在不同值较多的字段上建索引 5》对唯一性字段建索引 6》在频繁进行排序或分组的列上建立索引 4、MySQL建立索引 查询数据库所有的索引: 查看某一表的索引: show index from tb_name \G; 1》在创建表的时候创建索引 primary key、foreign key

面试宝典系列-Mysql索引的区别

青春壹個敷衍的年華 提交于 2020-03-25 12:58:03
3 月,跳不动了?>>> 叶节点包含了完整的数据记录。这种索引叫做聚集索引。因为InnoDB的数据文件本身要按主键聚集,所以InnoDB要求表必须有主键(MyISAM可以没有),如果没有显式指定,则MySQL 系统 会自动选择一个可以唯一标识数据记录的列作为主键,如果不存在这种列, 则 MySQL 自动为 InnoDB 表生成一个隐含字段作为主键,这个字段长度为 6 个字节 ,类型为长整形。 第一个重大区别是InnoDB的数据文件本身就是索引文件。从上文知道,MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。而在InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。 第二个与MyISAM索引的不同是InnoDB的辅助索引data域存储相应记录主键的值而不是地址。换句话说,InnoDB的所有辅助索引都引用主键作为data域。 聚集索引这种实现方式使得按主键的搜索十分高效,但是辅助索引搜索需要检索两遍索引:首先检索辅助索引获得主键,然后用主键到主索引中检索获得记录。 知道了InnoDB的索引实现后,就很容易明白为什么不建议使用过长的字段作为主键,因为所有辅助索引都引用主索引,过长的主索引会令辅助索引变得过大。再例如,

MyISAM 和 InnoDB

。_饼干妹妹 提交于 2020-03-25 08:22:39
3 月,跳不动了?>>> InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具 体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比 InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。   以下是一些细节和具体实现的差别:   ◆1.InnoDB不支持FULLTEXT类型的索引。   ◆2.InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。   ◆3.对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。   ◆4.DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。   ◆5.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表

[每天进步一点点]mysql笔记整理(一)

六眼飞鱼酱① 提交于 2020-03-24 15:09:46
3 月,跳不动了?>>> mysql 的一条 sql 是如何执行的 说明:mysql8.0 版本已经移除了查询缓存。 通信协议 mysql 是支持多种通信协议的,可以使用同步/异步的方式,支持长链接/短链接。 通信类型 同步 同步通信依赖于被调用方,受限于被调用方的性能。当应用操作数据库,线程会阻塞,等待数据库的返回结果。 同步方式一般只能做到一对一。 异步 异步可以避免线程的阻塞等待,但是不能减少 sql 的执行时间。 异步在高并发的情况下,会为每一个 sql 的执行创建一个连接,避免数据混乱。缺点是服务器压力会变大(线程间的切换会占用 cpu 资源)。 由于异步方式比较复杂,对服务器压力较大,所以一般情况下都会采用同步的方式。 连接方式 长连接:长连接可以保持打开,减少服务端创建和释放连接的消耗。但是长时间不关闭的情况下会消耗内存,mysql 默认超时时间是 28800s。 短连接:短连接是操作完成后立刻 close 掉。 通信方式 单工:在两台计算机之间通信的时候,数据传输是单向的。 半双工:在两台计算机之间通信的时候,数据传输是双向的,但是同一时间只能有一台发送数据,一台接受数据,不能两台同时发送或接收数据。 全双工:全双工就是可以同时发送或接收数据传输。 mysql 采用的通信方式是半双工的通信方式。 查询缓存 查询缓存是 mysql 内部自带的一个缓存模块。mysql

MySQL 架构

社会主义新天地 提交于 2020-03-23 18:36:55
3 月,跳不动了?>>> 执行流程简介 主要分为server层和存储引擎层。 server层主要分为:连接器、解析器、优化器、执行器、查询缓存 连接器:主要作用就是用户认证、给用户创建连接并使用连接池维护连接。 查询缓存:建立连接之后,就可以进行SQL操作了,如果该SQL语句在查询缓存中可以匹配到,则不需要找后面的模块了,但是查询缓存不建议使用。查询缓存中缓存的记录,如果对于的表发生写操作,那么这些记录都会从缓存中删除。在MySQL8以后,该功能直接去除掉了。在查询缓存中,key就是SQL语句,value是对应的结果。 解析器:词法解析、语法解析。 词法解析:根据空格将SQL语句拆分。拆分出来SQL关键字和非关键字(表、列) 语法解析:将SQL进行语法校验,是否符合SQL92标准或者MySQL的语法标准。并且在此处分析是DDL、还是DML、还是DQL语句。 优化器:优化索引,在此时会选择一个索引使用。并且在此时形成执行计划(如何使用索引、如何多表关联)。 执行器:按照优化之后的SQL,去调用存储引擎层,完成对应的操作。 存储引擎层:是真正和数据的读写有关系的。存储引擎是MySQL模块中真正和物理磁盘进行交互的部分。而存储引擎在MySQL中是采用插件式方式的。 客户端: select * ftom t where id = 1; 服务端: 调用连接器,去用户认证、建立连接

MySql存储引擎介绍

半世苍凉 提交于 2020-03-23 13:01:28
MySQL5.5以后默认使用 InnoDB 存储引擎,其中InnoDB和BDB提供事务安全表,其它存储引擎都是非事务安全表。 若要修改默认引擎,可以修改配置文件中的default-storage-engine。可以通过:show variables like 'default_storage_engine';查看当前数据库到默认引擎。命令: show engines 和 show variables like 'have%' 可以列出当前数据库所支持到引擎。其中Value显示为disabled的记录表示数据库支持此引擎,而在数据库启动时被禁用。在MySQL5.1以后,INFORMATION_SCHEMA数据库中存在一个ENGINES的表,它提供的信息与show engines;语句完全一样,可以使用下面语句来查询哪些存储引擎支持事物处理:select engine from information_chema.engines where transactions = 'yes'; 可以通过engine关键字在创建或修改数据库时指定所使用到引擎。 主要存储引擎:MyISAM、InnoDB、MEMORY和MERGE介绍: 在创建表到时候通过 engine=... 或 type=... 来指定所要使用到引擎。 show table status from DBname 来查看指定表到引擎

Mysql 数据库几种引擎的区别比较

China☆狼群 提交于 2020-03-23 12:46:42
数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以 获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySql的核心就是存储引擎。 存储引擎查看 MySQL给开发者提供了查询存储引擎的功能,我这里使用的是MySQL5.1,可以使用: SHOW ENGINES 命令来查看MySQL使用的引擎,命令的输出为(我用的Navicat Premium): 看到MySQL给用户提供了这么多存储引擎,包括处理事务安全表的引擎和出来了非事物安全表的引擎。 如果要想查看数据库默认使用哪个引擎,可以通过使用命令: SHOW VARIABLES LIKE 'storage_engine'; 来查看,查询结果为: 在MySQL中,不需要在整个服务器中使用同一种存储引擎,针对具体的要求,可以对每一个表使用不同的存储引擎。Support列的值表示某种引擎是否能使用:YES表示可以使用、NO表示不能使用、DEFAULT表示该引擎为当前默认的存储引擎 。下面来看一下其中几种常用的引擎。 ========================以上是转载的http://blog.csdn.net/zhangyuan19880606/article/details

面试总结——数据库篇

旧街凉风 提交于 2020-03-21 07:30:03
前言:前面介绍了Java、JVM相关方面的题目,该篇介绍数据库方面相关的题目,这里数据库为MySql,因为笔者或朋友在面试过程中都是涉及MySql的相关知识点。 数据库篇 在数据库题目中,由于现在大部分公司都是使用MySql作为数据库,因此笔者及其朋友所遇到的问题也都是MySql相关的知识点。 1)MySql中索引的基本定义,优劣势,以及索引优化。 索引是帮助Mysql高效获取数据的 数据结构 ,因此,索引的 本质 就是数据结构,索引的目的在于提高 查询 效率,可类比字典。 索引: 排好序的快速查找的数据结构。 用途: 排序 + 快速查找 。注意,是两种功能。 数据库除了存储数据本身之外,还维护着一个满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构的基础上实现高级查找算法,这种 数据结构 就是索引。 MySql索引通常是指 B+树 索引。 索引优势: 类似书籍的目录,提高数据检索的效率,降低数据库的 IO 成本(因为数据最终是存储在 磁盘 上的)。 通过索引列对数据进行排序,降低数据排序的成本,降低了 CPU 的消耗(因为排好序,查询速度增加)。 索引劣势: 索引也是 一张表 ,保存了主键与索引字段,并指向实体表的记录,所以索引列也是要 占用磁盘空间的 。 虽然提高了 查询速度 ,但是会 降低更新速度(因为数据更新后,需要重新对索引排序) ,如

Python数据库操作 Mysql数据库表引擎与字符集#学习猿地

被刻印的时光 ゝ 提交于 2020-03-20 12:22:47
# Mysql数据库表引擎与字符集 ![](./imgs/752951346A5F4E7EBDE362FA97107707.png) ### 1.服务器处理客户端请求 其实不论客户端进程和服务器进程是采用哪种方式进行通信,最后实现的效果都是:**客户端进程向服务器进程发送一段文本(MySQL语句),服务器进程处理后再向客户端进程发送一段文本(处理结果)。**那服务器进程对客户端进程发送的请求做了什么处理,才能产生最后的处理结果呢?客户端可以向服务器发送增删改查各类请求,我们这里以比较复杂的查询请求为例来画个图展示一下大致的过程: ![image](./imgs/167f4c7b99f87e1c.png) > 虽然查询缓存有时可以提升系统性能,但也不得不因维护这块缓存而造成一些开销,比如每次都要去查询缓存中检索,查询请求处理完需要更新查询缓存,维护该查询缓存对应的内存区域。从MySQL 5.7.20开始,不推荐使用查询缓存,并在MySQL 8.0中删除。 ### 2.存储引擎 `MySQL`服务器把数据的存储和提取操作都封装到了一个叫`存储引擎`的模块里。我们知道`表`是由一行一行的记录组成的,但这只是一个逻辑上的概念,物理上如何表示记录,怎么从表中读取数据,怎么把数据写入具体的物理存储器上,这都是`存储引擎`负责的事情。为了实现不同的功能,`MySQL`提供了各式各样的`存储引擎`