数据库知识点总结
数据库部分 1 引擎 - innodb 支持事务 支持行锁表锁 查询慢 - myisam 不支持十五 支持表锁 查询快 2 数据库授权 3 表结构设计 4 sql语句 5 了解: 视图 虚拟表。 存储过程 对结果集合返回值进行复杂操作。 触发器 在对某张表进行:增、删、改的前后自定义操作。 函数 对数据中的值进行操作。 存储过程和函数的区别? 存储过程out可以有返回值, 可以有sql语句 6 索引 索引实现原理: - B + tree # 树形结构, 左边小, 右边大 - hash # 有点类似字典目录 索引作用: 加速查找+约束 索引种类: - 主键索引:加速查找、不重复、非空 - 唯一索引:加速查找、不重复 - 普通索引:加速查找 - 联合索引:加速查找 - 联合唯一索引:加速查找、不重复 #:联合索引遵循最左前缀原则。(一定要带着最左边的索引才能命中索引) 名词: - 覆盖索引:在索引文件中就可以把想要的数据得到。 select name from tb1; - 索引合并:使用多个单列索引去查找数据。 7 创建索引,但无法命中索引。 https://www.cnblogs.com/wupeiqi/articles/5716963.html - like '%xx' select * from tb1 where name like '%cn'; - 使用函数 select * from tb1 where reverse(name) = 'wupeiqi'; - or select * from tb1 where nid = 1 or email = 'seven@live.com'; 特别的:当or条件中有未建立索引的列才失效,以下会走索引 select * from tb1 where nid = 1 or name = 'seven'; select * from tb1 where nid = 1 or email = 'seven@live.com' and name = 'alex' - 类型不一致 如果列是字符串类型,传入条件是必须用引号引起来,不然... select * from tb1 where name = 999; - != select * from tb1 where name != 'alex' 特别的:如果是主键,则还是会走索引 select * from tb1 where nid != 123 - > select * from tb1 where name > 'alex' 特别的:如果是主键或索引是整数类型,则还是会走索引 select * from tb1 where nid > 123 select * from tb1 where num > 123 - order by select email from tb1 order by name desc; 当根据索引排序时候,选择的映射如果不是索引,则不走索引 特别的:如果对主键排序,则还是走索引: select * from tb1 order by nid desc; - 组合索引最左前缀 如果组合索引为:(name,email) name and email -- 使用索引 name -- 使用索引 email -- 不使用索引 8 数据库优化方案? - 避免使用select * - 固定长度在前面 - 硬盘内存代替表,如:性别等 - 读写分离 - 分库 - 分表 - 水平分表 - 垂直分表 - 命中索引 - 组合索引代替索引合并 - 尽量使用短索引 - 如果取一条数据时,使用limit 1 select id,name from tb where name ='alex' limit 1; - 使用连接(JOIN)来代替子查询(Sub-Queries)