存储引擎(InnoDB和MyISAM)
MySQL的核心是插件式存储引擎,存储引擎是数据库底层软件组织,定义与磁盘打交道的方式,处理的内容:并发性、事务支持(ACID)、外键、物理存储、索引支持、内存高速缓存等。数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。MySQL常用的四种存储引擎包括MyISAM[maɪ-zeim]、InnoDB[,ɪnnə-db]、memory、merge。
设置存储引擎:CREATE TABLE 建表语句带上 “ENGINE = ”子句。
查看存储引擎:
1 | SHOW ENGINES |
特点 | MyISAM | BDB | Memory | InnoDB | Archive |
---|---|---|---|---|---|
存储限制 | 没有 | 没有 | 有 | 64TB | 没有 |
事务安全 | 支持 | 支持 | |||
锁机制 | 表锁 | 页锁 | 表锁 | 行锁 | 行锁 |
B树索引 | 支持 | 支持 | 支持 | 支持 | |
哈希索引 | 支持 | 支持 | |||
全文索引 | 支持 | ||||
集群索引 | 支持 | ||||
数据缓存 | 支持 | 支持 | |||
索引缓存 | 支持 | 支持 | 支持 | ||
数据可压缩 | 支持 | 支持 | |||
空间使用 | 低 | 低 | N/A | 高 | 非常低 |
内存使用 | 低 | 低 | 中等 | 高 | 低 |
批量插入的速度 | 高 | 高 | 高 | 低 | 非常高 |
支持外键 | 支持 |
https://blog.csdn.net/qq_39387475/article/details/78217147
InnoDB:MySQL的默认引擎。具有提交、回滚、崩溃恢复能力。 银行:对事物的完整性要求很高。售票:要求并发控制。
MyISAM:(Indexed Sequential Access Method ,“有索引的顺序访问方法”) 较高的插入、查询效率,但不支持事务。在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。
字段类型
数据类型会影响存储空间的开销和数据查询的性能。相同的数据,字符处理往往比数字慢(查询条件、join条件及排序),在数据库中,数据的处理是以页为单位,列的长度越小,数据类型占用的空间越小,利于性能的提升。
选择原则:优先考虑数字类型,其次是日期或二进制类型,最后是字符类型。
范式与逆范式
第一范式:确保数据表中每列的原子性(不可再分的最小数据单元,如user表包括id,username,password)
第二范式:在第一范式的基础上,表中每列都依赖于主键。
第三范式:在第二范式的基础上,要求一个数据库表中,不包含在其他表中已包含的非主关键字的信息。消除传递依赖。
有时候拆分得太细致,会产生很多连表。
逆范式:通过增加冗余或重复的数据来提高数据库的读性能。可以减少关联查询时,join表的次数。
索引
索引就好比是一本书的目录。
- 主键索引:ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
- 唯一索引:ALTER TABLE `table_name` ADD UNIQUE (`column`)
- 普通索引:ALTER TABLE`table_name` ADD INDEX index_name ( `column` )
- 全文索引:ALTER TABLE `table_name` ADD FULLTEXT ( `column`)
- 联合索引:ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )
- 普通索引:最基本的索引,没有任何限制
- 唯一索引:与”普通索引”类似,不同的就是:索引列的值必须唯一,但允许有空值。
- 主键索引:它 是一种特殊的唯一索引,不允许有空值。
- 全文索引:仅可用于 MyISAM 表,针对较大的数据,生成全文索引很耗时好空间。
- 联合索引:为了更多的提高mysql效率可建立组合索引,遵循”最左前缀“原则。
原文链接:https://blog.csdn.net/leyangjun/article/details/42461879
最左前缀:如果表拥有一个联合索引, 任何一个索引的最左前缀都会被优化器用于查找列. 比如, 如果你创建了一个三列的联合索引包含(col1, col2, col3), 你的索引会生效于(col1), (col1, col2), 以及(col1, col2, col3).
索引覆盖
前缀索引
对文本的前几个字符(具体是几个字符在建立索引时指定)建立索引,索引更小查询更快。
SQL优化(并发,大量数据插入,分页)
查询缓存query_cache
分区与分表(分区算法;水平分表,垂直分表)
慢查询日志
数据库服务器架构(主从复制,读写分离)
(选)系统日志与事务日志(binlog、redo log和undo log)
(选)消息队列