engine相关:
在MySQL设置文件中设置一个默认的引擎类型(使用storage_engine 选项)或者在启动数据库服务器时在命令行后面加上--default-storage-engine或--default-table-type选项 。
show engines;
CREATE TABLE mytable (id int, title char(20)) ENGINE = INNODB;
ALTER TABLE mytable ENGINE = MyISAM;
如果你指定一个在你的当前的数据库中不存在的一个存储引擎,那么就会创建一个默认的类型的表
MyISAM
设计为处理读频率远大于写频率的情况,查询性能非常好;不支持事务,没有REDO、UNDO日志;支持表锁;
每个表使用独立的文件,索引和数据都存放在不同文件中,文件的存储以file block(页)的形式存储。只缓存索引,并不缓存实际数据,每次读取数据时要使用磁盘IO,索引在内存中以cache block形式组织,与file block对应。索引的缓存使用LRU算法管理,为了提高缓存的利用率,支持将缓存分成多个区域,例如分成Hot Area、Warm Area
InnoDB
设计用于高并发读写情况,支持行锁(必须有索引支持);支持事务安全性,具有REDO、UNDO日志,具备故障恢复能力,其事务实现了SQL92的4个级别;支持外键,实现了数据库的引用完整性特性;
Adaptive Hash Index:InnoDB自动检测索引状况,如果发现可以通过hash index提高效率,会在内部创建一个基于B-Tree的hash index,并根据B-Tree索引的变化自动调整。hash index并不基于整个B-Tree创建,只针对其中的某部分;并不会存储到磁盘,仅创建在缓存区中
InnoDB的数据文件支持共享表空间和独享表空间2种模式,数据和索引存储在一起,支持数据和索引的缓存。存储结构从大到小依次为tablespace->segment->extent->Page,page默认为16KB,每个extent包含64个page,每个segment存放同一种数据,一般每个表存放于一个单独的segment中
B-Tree索引: 通用索引类型
InnoDB中的B-Tree索引分为Cluster形式的Primary Key和Secondary Index,与SQL Server类似,Primary Key索引的叶节点是实际数据文件,按索引顺序排列,Secondary Index的叶节点只存储Primary Key值。MyISAM的主键索引和非主键索引没什么区别,与InnoDB的Secondary Index类似,只是其叶节点存放的不是PK值,而是直接定位到数据行的信息
Hash索引:
将数据的索引键值进行hash运算建立索引,查询匹配时将查询条件也做hash运算,比较hash值进行匹配。主要是Memory和NDB Cluster存储引擎使用
Hash索引的查询效率非常高,因为不需要像B-Tree一样从根匹配到页节点
Fulltext索引: 只有MyISAM的CHAR, VARCHAR, TEXT三种数据类型支持fulltext索引,主要用于优化效率比较低的like '%***%'操作
R-Tree索引: 用于空间数据检索 MySQL有空间数据类型GEOMETRY(5.0.16之前只有MyISAM支持,之后BDB、InnoDB、NDB Cluster、Archieve等支持),只有MyISAM存储引擎支持R-Tree索引
group_concat_max_len
session/global 可动态变更
mysql> SHOW VARIABLES LIKE 'group_concat_max_len';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| group_concat_max_len | 1024 |
+----------------------+-------+
允许的group_concat()函数结果的最大长度 默认1024 最小4 无上限限制。
lower_case_table_names
global 级别 不可动态变更
默认情况下是否区分大小写
默认情况下 :数据库名与表名 表的别名 变量名是严格区分大小写
如果库中的表名 字段名有大小写区分 而后在my.cnf中修改lower_case_table_names 为1 则之前以大写创建的表则不再识别(测试结果)需修改 并重启之后,表方可查询使用.
MySQL在Windows下不区分大小写 如果在my.ini 里面的mysqld部分加入lower_case_table_names=0
则导入导出时会对大小写有区别
值:
如果设置为0,代表按实际创建语句中的大小写创建表文件 在比较查询表的时候也区分大小写
如果设置为1,表名用小写保存到硬盘上,并且表名比较时不对大小写敏感。
如果设置为2,按照指定的保存表名,但按照小写来比较。
该选项还适合数据库名和表的别名。
如果你正使用InnoDB表,你应在所有平台上将该变量设置为1,强制将名字转换为小写。如果运行MySQL的系统对文件名的大小写不敏感(例如Windows(默认为1)或Mac OS X),你不应将该变量设置为0。
如果启动时没有设置该变量,并且数据目录所在文件系统对文件名的大小写不敏感,MySQL自动将lower_case_table_names设置为2。
现:windows 默认设置为1 linux下测试库及正式库均为0
sync_binlog
global级别 可动态改变
设置二进制日志从binlog_buffer刷新到磁盘的频率,对mysql系统来说,他不仅影响binlog对mysql带来性能损耗,而且还影响mysql中数据的完整性
设置为0 :在事务提交之后 mysql不做fsync 之类的磁盘指令通知文件系统将binlog文件的缓存同步到磁盘,而让filesystem自行决定什么时候来做同步.
n :在每进行n此事务提交之后 mysql将进行一次fsync 之类的磁盘同步指令 通知文件系统将binlog文件的缓存同步到磁盘
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/27137314/viewspace-1191976/
,如需转载,请注明出处,否则将追究法律责任。