0%

database-note

在这里插入图片描述

存储引擎(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)
(选)消息队列