MySQL相关知识

存储引擎

  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工具

主从复制

集群

results matching ""

    No results matching ""