MyISAM

php高级工程师面试题

独自空忆成欢 提交于 2020-03-07 06:50:08
文章来源: https://blog.csdn.net/m0_37865510/article/details/83346248 如有侵权请联系删除 一、mysql相关知识 1、 mysql优化方式 MYSQL 优化常用方法 mysql 性能优化方案 2、如何分库分表 参考: http://blog.sina.com.cn/s/blog_6e322ce70100zs9a.html http://www.jb51.net/article/29771.htm 3、 Mysql+如何做双机热备和负载均衡 http://www.dewen.org/q/51/Mysql+如何做双机热备和负载均衡 4、数据表类型有哪些 MyISAM、InnoDB、HEAP、BOB,ARCHIVE,CSV等 MyISAM:成熟、稳定、易于管理,快速读取。一些功能不支持(事务等),表级锁。 InnoDB:支持事务、外键等特性、数据行锁定。空间占用大,不支持全文索引等。 myisam和Innodb引擎的主要特点 https://blog.csdn.net/octopuscz/article/details/79775384 5、防sql注入方法 mysql_escape_string(strip_tags($arr["$val"])); /** * 函数名称:post_check() * 函数作用

MySQL 索引

霸气de小男生 提交于 2020-03-07 04:09:08
用来记笔记的软件电脑端登不进去了,本来打算过了这段时期,专门总结下知识点,那就直接写在这里吧,有什么问题欢迎指出。 按功能分类 普通索引 唯一索引 主键索引 组合索引 外键索引 全文索引 按结构分类 B+ Tree索引:InnoDB和MyISAM Hash索引:Memory B+ Tree B+ Tree 是基于 B Tree 和叶子节点顺序访问指针进行实现的,一个节点中的key从左到右非递减排列。 Hash 哈希索引能以 O(1) 时间进行查找,但是失去了有序性: 无法用于排序与分组; 只支持精确查找,无法用于部分查找和范围查找。 InnoDB 存储引擎有一个特殊的功能叫“自适应哈希索引”,当某个索引值被使用的非常频繁时,会在 B+Tree 索引之上再创建一个哈希索引,这样就可以实现快速的哈希查找。 InnoDB存储引擎 InnoDB的数据文件本身就是索引文件。 叶子节点data域保存了完整的数据记录,这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引(这样的索引成为聚集索引)。 InnoDB的辅助索引data域存储相应记录主键的值。这使得按主键的搜索十分高效,但是辅助索引搜索需要检索两遍索引。 MyISAM存储引擎 MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址,索引文件和数据文件是分离的。 比较

MySQL索引以及优化总结

帅比萌擦擦* 提交于 2020-03-06 19:14:59
MySQL索引以及优化总结 B树和B+树结构 MyISAM与InnoDB 的存储区别 索引的本质 联合索引(最左前缀匹配原则) B树和B+树结构 MySQL为什么要用B+树:与二叉树和红黑树不同的是B树的节点上可以存放多个索引,这样降低了树的高度,使得查询效率更高。B+树在B树的基础上加以改进,父节点存放冗余索引,叶子节点存放所有的索引和数据(可能是索引对应行数据的文件地址或,也可能是整行数据),并且节点之间通过指针相互关联,查询效率进一步提升。 MyISAM与InnoDB 的存储区别 InnoDB 是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高,但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,否则其他索引也会很大。而 MyISAM 是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针,主键索引和辅助索引是独立的。 索引的本质 为什么索引一般选用tree而不用hash:因为hash只使用与指定值的查找而范围查找就需要全表扫描。 联合索引(最左前缀匹配原则) 最左前缀匹配原则,是一个非常重要的原则,可以通过以下这几个特性来理解。 1、对于联合索引,MySQL 会一直向右匹配直到遇到范围查询(> , < ,between,like)就停止匹配。比如 a = 3 and b = 4 and c > 5 and d

mysql引擎的对比

浪尽此生 提交于 2020-03-06 06:09:21
ISAM:ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到数据库被查询的次数要远大于更新的次数。因此,ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源。ISAM的两个主要不足之处在于,它不支持事务处理,也不能够容错:如果你的硬盘崩溃了,那么数据文件就无法恢复了。如果你正在把ISAM用在关键任务应用程序里,那就必须经常备份你所有的实时数据,通过其复制特性,MYSQL能够支持这样的备份应用程序。 MyISAM:MyISAM是MySQL的ISAM扩展格式和缺省的数据库引擎。除了提供ISAM里所没有的索引和字段管理的大量功能,MyISAM还使用一种表格锁定的机制,来优化多个并发的读写操作,其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间。MyISAM还有一些有用的扩展,例如用来修复数据库文件的MyISAMCHK工具和用来恢复浪费空间的 MyISAMPACK工具。MYISAM强调了快速读取操作,这可能就是为什么MySQL受到了WEB开发如此青睐的主要原因:在WEB开发中你所进行的大量数据操作都是读取操作。所以,大多数虚拟主机提供商和INTERNET平台提供商只允许使用MYISAM格式。MyISAM格式的一个重要缺陷就是不能在表损坏后恢复数据。 InnoDB

MySQL 存储引擎

非 Y 不嫁゛ 提交于 2020-03-05 22:35:28
存储引擎 DBMS使用存储引擎进行数据的创建、查询、更新、删除操作。 不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎还可以获得特定的功能。 MySQL提供了多种存储引擎,最常见的有3种。 1、MyISAM MySQL5.5之前的默认的存储引擎, 每个MyISAM在磁盘上存储成三个文件,文件名和表名相同,扩展名分别是 (1)frm文件:存储表的定义 (2)MYD文件:存储表中的数据(记录) (3)MYI文件:存储索引。 索引保存的是数据文件的指针 特点 访问速度快(优) 支持全文索引(优)。但基本不使用MySQL的全文索引,全文索引一般都是使用第三方的ElasticSearch,Solr等更加成熟的解决方案。 不支持事务、外键(缺) 默认的锁粒度为表级锁,所以并发度很差(缺),但加锁快,锁冲突较少,不容易发生死锁(优); 对数据的查询缓存只缓存索引,不缓存数据(记录),而且使用的是操作系统本身的缓存。 自动增长列可以是组合主键中的任何一列。设置自动增长列:创建表时,在字段后加auto_increment,默认初始值是1 适用场景 不需要事务 不使用外键 操作以select、insert为主 MyISAM支持三种不同的存储格式 (1)静态表(fixed) 表中不能包含变长字段(比如VARCHAR, BLOB, TEXT),每个记录都是固定的长度

MySQL 的覆盖索引与回表

别来无恙 提交于 2020-03-04 15:12:54
两大类索引 使用的存储引擎:MySQL5.7 InnoDB 聚簇索引 * 如果表设置了主键,则主键就是聚簇索引 * 如果表没有主键,则会默认第一个NOT NULL,且唯一(UNIQUE)的列作为聚簇索引 * 以上都没有,则会默认创建一个隐藏的row_id作为聚簇索引 InnoDB的聚簇索引的叶子节点存储的是行记录(其实是页结构,一个页包含多行数据),InnoDB必须要有至少一个聚簇索引。 由此可见,使用聚簇索引查询会很快,因为可以直接定位到行记录。 普通索引 普通索引也叫二级索引,除聚簇索引外的索引,即非聚簇索引。 InnoDB的普通索引叶子节点存储的是主键(聚簇索引)的值,而MyISAM的普通索引存储的是记录指针。 示例 建表 mysql> create table user( -> id int(10) auto_increment, -> name varchar(30), -> age tinyint(4), -> primary key (id), -> index idx_age (age) -> )engine=innodb charset=utf8mb4; id 字段是聚簇索引,age 字段是普通索引(二级索引) 填充数据 insert into user(name,age) values('张三',30); insert into user(name,age)

MySQL之架构与历史(二)

大憨熊 提交于 2020-03-03 23:08:15
多版本并发控制 MySQL的大多数事务型存储引擎实现的都不是简单的行级锁。基于提升并发性能的考虑,它们一般都同时实现了多版本并发控制(MVCC)。不仅是MySQL,包括Oracle、PostgreSQL等其他数据库系统也都实现了MVCC,但各自的实现机制不尽相同,因为MVCC没有一个统一的实习标准。 可以认为MVCC是行级锁的一个变种,但是它在很多情况下避免了加锁操作,因此开销更低。虽然实现机制不同,但大都实现了非阻塞的读操作,写操作也只锁定了必要的行。 MVCC的实现,是通过保存数据在某个时间点的快照来实现的。也就是说,不管需要执行多长时间,每个事务看到的数据都是一致的。根据事务开始的时间不同,每个事务对同一张表,同一时刻看到的数据可能是不一样的。 前面说到不同存储引擎的MVCC实现是不同的,典型的有乐观(optimistic)并发控制和悲观(pessimistic)并发控制。下面我们通过InnoDB的简化版行为来说明MVCC是如何工作的。 InnoDB的MVVC,是通过在每行记录后面保存两个隐藏列来实现的。一个保存了行的创建时间,一个保存了行的过期时间(或删除时间)。当然存储的并不是实际的时间值,而是系统版本号(system version number)。每开启一个新的事务,系统版本号都会自动递增。事务开始时刻的系统版本号会作为当前事务的版本号

2020麻烦你搞清楚这些问题,再说你了解数据库

冷暖自知 提交于 2020-03-03 17:08:44
程序员中一直有一个段子广为流传:大不了我们“删库跑路” 由此可见作为一个程序员,不了解数据库怎么能行,那么数据库到底是个啥呢,作为一个Java工程师,平时和数据库打交道着实不少,所谓的CRUD其实就是对数据库进行增删改查的操作。 根据百度百科的介绍,数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。 数据库是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合,可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作。 是不是没听懂,好吧,简单来说,像MySQL这样的数据库,就是用于存储结构化数据的,比如一个学生的信息数据,一个商品的数据,或者是一个学生购买商品的消费数据。 联想到平时我们经常使用的Excel,其实和数据库挺像的,数据库其实就是一个表格,里面有很多的数据类型,比如字符串,比如数字,再比如长文本等等。 而这类数据库也叫关系型数据库,典型代表就是MySQL。 再看看百度百科的介绍,关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码

深入理解MySQL底层实现

自古美人都是妖i 提交于 2020-03-02 13:01:12
本文摘自: http://harlon.org/2018/06/20/database/ 深入理解MySQL底层实现 这里选用MySQL作为了解数据库的底层实现,这是因为MySQL是目前最常用的数据库,了解它的底层实现也基本上对目前大数据的数据库所用的技术会有一个大致的了解。数据库最主要的索引设计,了解数据库的索引设计基本上就对数据库有了大致的了解,其次对其事务的ACID操作实现原理做以分析,以及数据库中所用到的提高其性能的优化等等。 存储引擎 MySQL常用的存储引擎有InnoDB和MyISAM,其中MyISAM是MySQL的默认存储引擎。 InnoDB InnoDB的存储文件有两个,后缀名分别是.frm和.idb,其中.frm是表的定义文件,而idb是数据文件。InnoDB中存在表锁和行锁,不过行锁是命中索引的情况下才会起作用的。 InnoDB支持事务,且支持四种隔离级别,即原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability)。 原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被恢复(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。 一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏

MySQL引擎

你离开我真会死。 提交于 2020-03-02 08:18:06
MySQL提供多种存储引擎,通过命令 show engines; 查看 查看当前默认的存储引擎 show variables like '%storage_engine%'; 查看某个表用了什么引擎 show create table 表名; MyISAM引擎: 没有提供对数据库事务的支持,也不支持行级锁和外键,因此当INSERT或UPDATE数据时即写操作需要锁定整个表。存储了表的行数,SELECT COUNT(*) FROM TABLE时,只需要直接读取已经保存好的值而不需要进行全表扫描,如果表的读操作远远多于写操作且不需要事务支持,那么MyISAM是个好选择。 InnoDB引擎: InnoDB是MySQL默认的引擎,提供对ACID事务的支持,并且实现SQL标准的四种隔离级别,提供行级锁和外键约束,它的设计目的是处理大容量数据库系统,在运行时,Innodb会在内存建立缓冲池,用于缓冲数据和索引。没有保存表的行数,当SELECT COUNT(*) FROM TABLE时,需要扫描全表。使用行级锁不是一定的,如果一个SQL语句不能确定要扫描的范围,InnoDB表同样会锁全表。 MyISAM引擎索引实现 B+树作为索引结构,叶节点的data域存放的是数据记录的地址。 主键索引原理图: 辅助索引: InnoDB引擎索引实现 同样使用B+树作为索引结构。MyISAM索引文件和数据是分离的