暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL技术内幕读书笔记(持续更新)

evilRat 2021-01-25
280

2. MyISAM存储引擎

  1. MyISAM存储引擎不支持事务、锁表设计,支持全文索引,主要面向一些OLAP数据库应用。
  2. MySQL5.5.8之前默认存储引擎是MyISAM(Windows版本除外)。
  3. MyISAM存储引擎的缓冲池只缓存索引文件,而不缓存数据文件。这点和大多数数据库都不同。
  4. MyISAM存储引擎表由MYD和MYI组成,MYD用来存放数据文件,MYI用来存放索引文件。
  5. MySQL5.0之前MyISAM默认支持的表大小是4G,如果需要更大的MyISAM表的话,就要制定MAX_ROWS和AVG_ROW_LENGTH属性。从5.0版本开始,MyISAM默认支持256TB的单表数据,这足够一般应用的需求。
  6. MyISAM存储引擎表,Mysql数据库只缓存其索引文件,数据文件的缓存交给操作系统本身完成,这与LRU算法缓存数据的大部分数据库都不同。MySQL 5.1.23之前,缓存索引的缓冲区最大只能设置为4GB,在之后的版本中,64位系统可以支持大于4GB的索引缓冲区。

其他存储引擎

  1. NDB:一个集群存储引擎。数据全部放在内存中(从MySQL 5.1之后,可以将非索引数据放在磁盘上),所以主键查找速度极快,通过添加NDB数据存储节点,可以线性的提高数据库性能,是高可用、高性能的集群系统。复杂的连接操作网络开销很大,因为NDB的连接操作(JOIN)是在数据库层完成的,而不是在存储引擎层完成的。
  2. Memory: 之前被称为HEAP存储引擎。将表中的数据存放在内存中,如果数据库重启或发生崩溃,表中的数据全部消失。非常适合非常适合存储临时数据。默认使用hash哈希索引,而不是B+树索引。只支持表锁,并发性能差,不支持TEXT、BLOB列类型。存储变长字段varchar是按照定长char方式存储的,因此会浪费空间。MySQL数据库使用Memory存储引擎作为临时表来存放查询的中间结果集,如果中间结果集大于Memory存储引擎表的容量设置,又或者中间结果含有TEXT或BLOB字段,则MySQL会把其转换成MyISAM存储引擎表存放到磁盘中,因为MyISAM不缓存数据文件,所以这时产生的临时表的性能对于查询会有损失。
  3. Archive存储引擎:Archive引擎只支持INSERT和SELECT操作,从MySQL5.1开始支持索引。Archive引擎使用zlib算法将数据行(row)进行压缩后存储,压缩比可达到1:10。正如其名,Archive存储引擎非常适合存储归档数据,如日志信息。通过行锁来实现高并发的插入操作。但是不是事务安全的,目的主要是提供高速的插入和压缩。
  4. Federated存储引擎:Federated存储引擎并不存储数据,他只是指向一台远程MySQL数据库服务器上的表。类似SQL Server的链接服务器和Oracle的透明网关。不同的是,Federated只支持MySQL数据库表,不支持异构数据库表。
  5. Maria存储引擎:Maria当初是为了取代原有的MyISAM而设计的,从而成为MySQL默认存储引擎。支持缓存数据和索引文件,应用了行锁设计,提供了MVCC功能,支持事务和非事务安全的选项,以及更好的BLOB字符类型的处理性能。

其它

  1. 查看当前使用MySQL版本支持的引擎:

show engines\G;


连接MySQL

1. TCP/IP


mysql -h 192.168.0.101 -u root -p


通过TCP/IP连接到数据库实例的时候,MySQL数据库会先检查一张权限视图,用来判断此请求是否允许连接。该视图在MySQL架构下,表名为user。


use mysql;
select host, userpassword from user;


2. 命名管道和共享内存

如果在MySQL服务器本机连接,可以通过命名管道,但是需要MySQL数据库在配置文件中启用--enable-named-pipe
选项。在MySQL 4.1之后,还提供了共享内存的连接方式,需要在配置文件中添加--shared-memory
实现,在连接时,MySQL客户端还需要使用--protocol=memory
选项。

3. UNIX域套接字

在Linux/UNIX环境下,可以使用UNIX域套接字。UNIX域套接字并不是一个网络协议,所以只能在MySQL客户端和数据库实例在一台服务器上时使用。用户可以在配置文件中执行套接字文件的路径。如--socket=/tmp/mysql.sock
。可以通过命令show variables like 'socket';
来查找套接字文件。知道了套接字文件的路径后,就可以通过下面的命令连接了:


mysql -u root -S /tmp/mysql.sock



文章转载自evilRat,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论