InnoDB与MyISAM的区别
- InnoDB支持事务 , MyISAM不支持 , InnoDB将每条SQL语句都默认添加事务 , 自动提交 , 这样会影响效率 , 所以最好将多条SQL语句放在begin和commit之间 , 组成一个事务 。
- InnoDB支持外键 , MyISAM不支持 , 如果将一个包含外键的InnoDB表转为MyISAM会失败 。
- InnoDB是聚集索引 , 数据文件和索引是绑在一起的 , 必须有主键 , 通过主键查询效率会很高 。MyISAM是非聚集索引 , 数据文件和索引是分离的 。
- InnoDB不保存表的具体行数 , 执行select count(*) from table时需要全表扫描 , 而MyISAM用一个变量保存 , 执行上面这个语句时 , 只要读出该变量即可 , 速度很快 。
- InnoDB不支持全文索引 , 而MyISAM支持 , 所以MyISAM的查询效率比较高 。
- 索引是加快检索表中数据的方法 , 数据库的索引类似书籍的索引 , 在书籍中 , 允许用户不必翻阅整本书就能迅速的找到需要的信息 , 在数据库中 , 索引也允许数据库迅速地找到表中的数据 , 而不必扫描整个数据库 。
- MySQL中有4种不同的索引主键索引唯一索引普通索引全文索引
- 索引不是越多越好 , 创建索引也需要消耗资源 , 一是增加了数据库的存储空间 , 二是插入和删除表数据 , 都要花较多的时间维护索引 。
- 字段是唯一的 , 建立唯一索引 , 可以更快速通过索引来确定某条记录 。
- 经常需要排序、分组、联合操作的字段建立索引 。
- 为常作为查询条件的字段建立索引 。
- 删除不再使用或很少使用的索引 。
- 索引列不能参加计算 , 带函数的查询 , 不参与索引 。
- 最左前缀匹配原则 。
- 第一范式 , 列不可再分
- 第二范式 , 行有唯一区分的字段 , 主键约束
- 第三范式 , 表的非主属性不能依赖与其他表的非主属性外键约束
- 事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列操作 , 这些操作作为一个整体一起向系统提交 , 要么都执行、要么都不执行 。
- 事务是一个不可分割的工作逻辑单元 , 事务必须具备以下四个属性 , 简称 ACID 属性原子性(Atomicity)事务是一个完整的操作 。事务的各步操作是不可分的(原子的);要么都执行 , 要么都不执 行 。一致性(Consistency)当事务完成时 , 数据必须处于一致状态 。隔离性(Isolation)对数据进行修改的所有并发事务是彼此隔离的 , 这表明事务必须是独立的 , 它不应以任何方 式依赖于或影响其他事务 。永久性(Durability)事务完成后 , 它对数据库的修改被永久保持 , 事务日志能够保持事务的永久性 。
- 查询语句中不要使用select *
- 尽量减少子查询 , 使用关联查询(left join、right join、inner join)替代
- 减少使用IN或者NOT IN , 使用exists , not exists或者关联查询语句替代
- or 的查询尽量用 union 或者 union all 代替(在确认没有重复数据或者不用剔除重复数据时 , union all会更好)
- 应尽量避免在 where 子句中使用!=或<>操作符 , 否则将引擎放弃使用索引而进行全表扫描 。
- 应尽量避免在 where 子句中对字段进行 null 值判断 , 否则将导致引擎放弃使用索引而进行全表扫描 , 如: select id from t where num is null 可以在num上设置默认值0 , 确保表中num列没有null值 , 然后这样查询: select id from t where num = 0
- delete和truncate只删除表的数据不删除表的结构 。
- delete删除记录 , 不删除表结构 , delete语句可以加where , 删除操作会记录在日志 , 可以回滚 , 删除时 , 会激活触发器 。
- truncate删除记录 , 不删除表结构 , truncate语句不可以加where , 删除操作不记录在日志 , 不能回滚 , 不会激活触发器 。
推荐阅读
- 袁天罡的后人是谁 历史上有袁天罡这个人吗
- Mysql数据库实现主从同步,看这一篇就够了
- 10分钟自建企业级Docker镜像仓库!这个开源项目太顶了
- 电视机顶盒和网络机顶盒哪个好?
- Python自带爬虫库urllib使用大全
- 癫痫的前兆有哪些症状
- 如何治疗痔疮的小窍门
- 皮肤受损后该如何修复
- 西装|辣目洋子教你玩转西装穿搭,微胖女生这样穿也能在职场脱颖而出
- 老年人脚麻木吃什么药