1 Star 0 Fork 0

somefusion / Python-100-Days

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
93.数据库设计和OOAD.md 2.38 KB
一键复制 编辑 原始数据 按行查看 历史
jackfrued 提交于 2019-06-05 23:44 . 调整了目录结构

数据库设计和OOAD

存储引擎

  1. InnoDB
  2. MyISAM

数据类型

索引

索引的类型

  1. B-Tree索引
  2. HASH索引
  3. R-Tree索引(空间索引)
  4. Full-text索引(全文索引)

视图

查询的快照,可以将访问权限控制到列上。

create view ... as select ...
drop view ...

存储过程

create procedure ... (params)
begin
...
end;

call ...
cursor.callproc('...')

触发器

不能用,因为多个行锁可能直接升级为表锁,导致性能低下。

事务控制

SQL注入攻击

数据分区

SQL优化

优化步骤

  1. 通过show status了解各种SQL的执行频率。

    show status like 'com_%';
    show status like 'innodb_%';
    show status like 'connections';
    show status like 'slow_queries';
  2. 定位低效率的SQL语句 - 慢查询日志。

    show processlist
  3. 通过explain了解SQL的执行计划。

    • select_type:查询类型(simple、primary、union、subquery)
    • table:输出结果集的表
    • type:访问类型(ALL、index、range、ref、eq_ref、const、NULL)
    • possible_keys:查询时可能用到的索引
    • key:实际使用的索引
    • key_len:索引字段的长度
    • rows:扫描的行数
    • extra:额外信息
  4. 通过show profilesshow profile for query分析SQL。

SQL优化

  1. 优化insert语句
  2. 优化order by语句
  3. 优化group by语句
  4. 优化嵌套查询
  5. 优化or条件
  6. 优化分页查询
  7. 使用SQL提示
    • USE INDEX
    • IGNORE INDEX
    • FORCE INDEX

配置优化

  1. 调整max_connections
  2. 调整back_log
  3. 调整table_open_cache
  4. 调整thread_cache_size
  5. 调整innodb_lock_wait_timeout

架构优化

  1. 通过拆分提高表的访问效率
    • 垂直拆分
    • 水平拆分
  2. 逆范式理论
    • 数据表设计的规范程度称之为范式(Normal Form)
      • 1NF:列不能再拆分
      • 2NF:所有的属性都依赖于主键
      • 3NF:所有的属性都直接依赖于主键(消除传递依赖)
      • BCNF:消除非平凡多值依赖
  3. 使用中间表提高统计查询速度

数据备份

导入和导出

  1. select ... into outfile ...
  2. load data infile ... into table ...
  3. mysqldump
  4. mysqlimport

ibbackup工具

xtrabackup工具

主从复制

集群

马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/somefusion/Python-100-Days.git
git@gitee.com:somefusion/Python-100-Days.git
somefusion
Python-100-Days
Python-100-Days
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891