MylSAM和InnoDB的区别
InnoDB:数据库默认使用
MylSAM:早些年使用
MylSAM | InnoDB | |
---|---|---|
事务支持 | 不支持 | 支持 |
数据行锁 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间大小 | 较小 | 较大,约前者2倍 |
- MylSAM 节约空间,速度较快
- InnoDB 安全性高,多表用户操作
索引
MySQL官方对索引的定义为:索性(Index)是帮助MySQL高效获取数据的数据结构。
索引的分类
- 主键索引(PRIMARY KEY)
- 唯一的标识,主键不可重复
- 唯一索引(UNIQUE KEY)
- 避免重复的列出现,多个列都可以标识为唯一索引
- 常规索引(KEY/INDEX)
- 默认的
- 全文索引(FullText)
- 在特定的引擎下才有,MyISAM
- 用于快速定位数据
创建索引规则:
create index id_表名_字段名 on 表名(字段名)
分享sql执行:
explain select * from 表名
建索引原则
- 索引不是越多越好
- 不要对经常变动的数据加索引
- 小数据量不需要加索引
- 索引一般加在经常用来查询的字段上
三大范式
第一范式
原子性:保证每一列都不可再分。比如家庭信息不能作为一个字段既存姓名又存年龄,正确的做法是拆分成两个字段。
第二范式
前提:满足第一范式。
每张表只描述一件事。比如订单表不能既存商品信息又存订单信息,正确的做法是拆成订单表和订单明细表。
第三范式
前提:满足第一范式和第二范式。
确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
但是
考虑到性能的问题,有时候可以不完全按照三大范式去设计数据库。比如故意给某些表增加一些冗余字段,这样就不用关联查询了。
sql防注入:PreparedStatement