MyISAM

[数据库] MySql知识点总结

匿名 (未验证) 提交于 2019-12-02 22:06:11
MySQL的总体架构如下图所示 包括数据库连接器、连接池、SQL接口、解析器、优化器、缓存、存储引擎的等。其中常用的存储引擎为Innodb和MyISAM。Innodb有如下特点: 使用Table Space的方式进行数据存储,表现为 /var/lib/mysql/ibdata1 文件和 /var/lib/mysql/ib_logfile0 文件; 支持事物、外键约束等数据库特性; 支持行级锁(Row level lock),读写性能都非常优秀; 能够承载大数据量的存储和访问; 拥有自己独立的缓冲池,能够缓存数据和索引 在关闭自动提交的情况下,与MyISAM引擎的速度差异不大; MyISAM存储引擎具有如下特点: 数据存储方式简单,使用B+ Tree进行索引; 使用三个文件定义一个表: .MYI .MYD .frm; 少碎片、支持大文件、能够进行索引压缩; 二进制层次的文件可以移植(Linux->Windows); 访问速度飞快,是所有MySQL文件引擎中速度最快的; 不支持一些数据库特性,比如事物、外键约束等; 表级别锁(Table level lock),性能稍差,更适合读多的操作; 表数据容量有限,一般建议单表数据量介于50W~200W之间; 增删改查操作完后要使用myisamchk检查优化表; Innodb的逻辑存储结构如下所示: 逻辑上所有数据都存放在一个表空间中

mysql性能优化

匿名 (未验证) 提交于 2019-12-02 22:06:11
数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情 1.为查询缓存优化你的查询 mysql > show variables like ' %query_cache% ' ; (query_cache_type 为 ON 表示已经开启) + -- ----------------------------+----------+ | Variable_name | Value | + -- ----------------------------+----------+ | have_query_cache | YES | | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 20971520 | | query_cache_type | ON | | query_cache_wlock_invalidate | OFF | + -- ----------------------------+----------+ 如果不是ON,修改配置文件以开启查询缓存: > vi / etc / my.cnf [ mysqld ] 中添加: query_cache

MySQL入门到精通(五 )

匿名 (未验证) 提交于 2019-12-02 22:06:11
5.1 MySQL存储引擎 5.1.1 MySQL存储引擎的概率 MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。 例如,如果你在研究大量的临时数据,你也许需要使用内存MySQL存储引擎。内存存储引擎能够在内存中存储所有的表格数据。又或者,你也许需要一个支持事务处理的数据库(以确保事务处理不成功时数据的回退能力)。 这些不同的技术以及配套的相关功能在 MySQL中被称作存储引擎(也称作表类型)。 MySQL默认配置了许多不同的存储引擎,可以预先设置或者在MySQL服务器中启用。你可以选择适用于服务器、数据库和表格的存储引擎,以便在选择如何存储你的信息、如何检索这些信息以及你需要你的数据结合什么性能和功能的时候为你提供最大的灵活性。 5.1.2 查询MySQL中支持的存储引擎 1.查询支持的全部存储引擎 在MySQL中,可以使用SHOW ENGINES语句查询MySQL中支持的存储引擎;语句如下: SHOW ENGINES; SHOW ENGINES语句可以用‘;’结束,也可以用‘\g’或者‘\G’结束。‘\g’与‘;’的作用是相同的,‘\G’可以让结果显示的更加美观。以下是三种查询结果: show

mysql引擎区别

匿名 (未验证) 提交于 2019-12-02 22:06:11
MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的。要添加一个新的引擎,就必须重新编译MYSQL。在缺省情况下,MYSQL支持三个引擎:ISAM、MYISAM和HEAP。另外两种类型INNODB和BERKLEY(BDB),也常常可以使用。如果技术高超,还可以使用MySQL+API自己做一个引擎。下面介绍几种数据库引擎: ISAM:ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到 数据库被查询的次数要远大于更新的次数。因此,ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源。ISAM的两个主要不足之处在于,它不 支持事务处理,也不能够容错:如果你的硬盘崩溃了,那么数据文件就无法恢复了。如果你正在把ISAM用在关键任务应用程序里,那就必须经常备份你所有的实 时数据,通过其复制特性,MYSQL能够支持这样的备份应用程序。 MyISAM:MyISAM是MySQL的ISAM扩展格式和缺省的数据库引擎。除了提供ISAM里所没有的索引和字段管理的大量功能,MyISAM还使用一种表格锁定的机制,来优化多个并发的读写操作,其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间。MyISAM还有一些有用的扩展,例如用来修复数据库文件的MyISAMCHK工具和用来恢复浪费空间的 MyISAMPACK工具

mysql优化(二)

匿名 (未验证) 提交于 2019-12-02 22:06:11
索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置。如果表有1000个记录,通过索引查找记录至少要比顺序扫描记录快100倍。 主键是一种唯一性索引,但它必须指定为“PRIMARY KEY”。如果你曾经用过AUTO_INCREMENT类型的列,你可能已经熟悉主键之类的概念了。主键一般在创建表的时候指定,例如“CREATE TABLE tablename ( [...], PRIMARY KEY (列的列表) ); ”。但是,我们也可以通过修改表的方式加入主键,例如“ALTER TABLE tablename ADD PRIMARY KEY (列的列表); ”。每个表只能有一个主键。 创建主键索引 主键是一种唯一性索引,但它必须指定为“PRIMARY KEY”。如果你曾经用过AUTO_INCREMENT类型的列,你可能已经熟悉主键之类的概念了。主键一般在创建表的时候指定,例如“CREATE TABLE tablename ( [...], PRIMARY KEY (列的列表) ); ”。但是

MySQL规范

匿名 (未验证) 提交于 2019-12-02 22:06:11
一、MySQL数据库命名规范 数据库所有表前缀均使用项目名称首字母缩写; 数据库所有对象名称均使用小写字母,并且单词之间通过下划线分开; 数据库临时表必须以 pro_tmp_ 为前缀并且以日期 _20190917 为后缀,备份表必须以 pro_bac_ 为前缀并以时间戳为后缀;(pro为项目名称首字母缩写); 数据库所有存储相同数据的列名和列类型必须保持一致。 二、MySQL数据库基本设计规范 若无特殊说明,建表时一律采用Innodb存储引擎; 选择合适的引擎可以提高数据库性能,如InnoDB和MyISAM,InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定;基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持;MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持以及外部键等高级数据库功能;因此,其支持事务处理、支持外键、支持崩溃修复能力和并发控制是我们建表时首选的存储引擎。 数据库和表的字符集统一使用UTF8; 数据库和表的字符集统一使用utf8,若是有字段需要存储emoji表情之类的,则将表或字段设置成utf8mb4;因为,utf8号称万国码,其无需转码、无乱码风险且节省空间,而utf8mb4又向下兼容utf8。

mysql存储引擎(innodb & myisam)

匿名 (未验证) 提交于 2019-12-02 22:06:11
常用的主要分为两种,一种是innodb,一种是myisam,两者的主要区别是 1、myisam不支持事务处理,而innoDB支持事务处理 2、myisam 不支持外键,innoDB支持外键 3、myisam支持全文检索,而innoDB在MySQL5.6版本之后才支持全文检索 4、数据的存储形式不一样,mysiam表存放在三个文件:结构、索引、数据,innoDB存储把结构存储为一个文件,索引和数据存储为一个文件 5、myisam在查询和增加数据性能更优于innoDB,innoDB在批量删除方面性能较高。 6、myisam支持表锁,而innoDB支持行锁 mysql的静态表和动态标的区别,MyISAM和InnoDB的区别 静态表字段长度固定,自动填充,读写速度很快,便于缓存和修复,但比较占硬盘,动态表是字段长度不固定,节省硬盘,但更复杂,容易产生碎片,速度慢,出问题后不容易重建。 MyISAM与InnoDB的区别是什么? 1、 存储结构 MyISAM :每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义。数据文件的扩展名为.MYD (MYData)。索引文件的扩展名是.MYI (MYIndex)。 InnoDB :所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件)

mysql

匿名 (未验证) 提交于 2019-12-02 22:06:11
索引相关 关于MySQL的索引,曾经进行过一次总结,文章链接在这里 Mysql索引原理及其优化. 什么是索引? 索引是一种数据结构,可以帮助我们快速的进行数据的查找. 索引是个什么样的数据结构呢? 索引的数据结构和具体存储引擎的实现有关, 在MySQL中使用较多的索引有Hash索引,B+树索引等,而我们经常使用的InnoDB存储引擎的默认索引实现为:B+树索引. Hash索引和B+树所有有什么区别或者说优劣呢? 首先要知道Hash索引和B+树索引的底层实现原理: hash索引底层就是hash表,进行查找时,调用一次hash函数就可以获取到相应的键值,之后进行回表查询获得实际数据.B+树底层实现是多路平衡查找树.对于每一次的查询都是从根节点出发,查找到叶子节点方可以获得所查键值,然后根据查询判断是否需要回表查询数据. 那么可以看出他们有以下的不同: hash索引进行等值查询更快(一般情况下),但是却无法进行范围查询. 因为在hash索引中经过hash函数建立索引之后,索引的顺序与原顺序无法保持一致,不能支持范围查询.而B+树的的所有节点皆遵循(左节点小于父节点,右节点大于父节点,多叉树也类似),天然支持范围. hash索引不支持使用索引进行排序,原理同上. hash索引不支持模糊查询以及多列索引的最左前缀匹配.原理也是因为hash函数的不可预测.AAAA和AAAAB的索引没有相关性.

MySQL存储引擎介绍

匿名 (未验证) 提交于 2019-12-02 22:06:11
mysql数据库常用的三种存储引擎:  数据库的存储引擎:5.6版本之后的默认为InnoDB存储,5.5版本之前的默认是MyISAM存储引擎 1.第一种myisam:三个文件 (1)表结构存文件、数据文件、搜索目录三个文件都存放在硬盘上 (2)应用于以读和插入为主的操作,很少的更新和删除 (2)不支持事务安全、不支持外键、不支持行级锁,表级锁严重影响并发 2.第二种innodb:两个文件 (1)表结构文件、数据和搜索目录文件都存放在硬盘上 (2)支持支持外键、支持行级锁、表级锁、事务安全确保事务的完整提交和回滚, (3) 3.第三种memory:两个文件 (1)表结构存储在硬盘,数据存储在内存,对表的大小有限制 (2)读写速度快,关机会导致内存数据的丢失,多用于热新闻 MyISAM和InnoDB区别 MyISAM是MySQL的默认数据库引擎(5.5版之前)。虽然性能极佳,而且提供了大量的特性,包括全文索引、压缩、空间函数等,但MyISAM不支持事务和行级锁,而且最大的缺陷就是崩溃后无法安全恢复。不过,5.5版本之后,MySQL引入了InnoDB(事务性数据库引擎),MySQL 5.5版本后默认的存储引擎为InnoDB。 大多数时候我们使用的都是 InnoDB 存储引擎,但是在某些情况下使用 MyISAM 也是合适的比如读密集的情况下。(如果你不介意 MyISAM 崩溃回复问题的话)

mysql的各种锁简单总结

匿名 (未验证) 提交于 2019-12-02 22:02:20
表总体上分为三种:   1、表锁 Myisam  开销小,并发低,加锁快,不会出现死锁问题;锁粒度大,发生锁冲突的概率最高。   3、页面锁      开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。(不常用) 共享锁(读锁)/排它锁(写锁)   共享锁又叫读锁,是读取操作创建的锁。其他用户可以同步读取数据,但是不能够写数据。   排它锁又叫写锁,是更新操作创建的锁。其他用户不可以同步读取数据更不能写数据。 MyIsam锁模式:   MyIsam引擎在执行查询语句前,会自动给涉及到的表添加读锁;在更新操作前会自动给涉及到的表加写锁。   a、对MyIsam中的表进行读取操作,其他用户可以进行读取,但是不能修改;   b、对MyIsam中的表进行更新操作,其他用户不能进行读取,更不能进行操作。 InnoDb锁模式:   对于insert、update、delete,InnoDB会自动给涉及的数据加排他锁(X);对于一般的Select语句,InnoDB不会加任何锁,事务可以通过以下语句给显示加共享锁或排他锁。 共享锁: SELECT ... LOCK IN SHARE MODE; 排他锁: SELECT ... FOR UPDATE; InnoDb是根据索引加行锁的,如果没有索引的话依然是加表锁。因此如果多行数据都使用同一个索引,会出现锁冲突