数据库知识点总结

数据库部分

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)

 

posted @ 2019-04-28 11:09  孙昌恒  阅读(91)  评论(0编辑  收藏  举报