在前面《关系型数据库MySQL》一文中,我们已经讲到过索引的相关知识,这里我们做一个简单的回顾。
- B-Tree索引
- HASH索引
- R-Tree索引(空间索引)
- Full-text索引(全文索引)
过程,通常也称之为存储过程。
create procedure ... (params)
begin
...
end;
call ...
cursor.callproc('...')
-
通过
show status
了解各种SQL的执行频率。show status like 'com_%'; show status like 'innodb_%'; show status like 'connections'; show status like 'slow_queries';
-
定位低效率的SQL语句 - 慢查询日志。
show processlist
-
通过
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:额外信息
-
通过
show profiles
和show profile for query
分析SQL。 -
优化CRUD操作。
- 优化insert语句
- 优化order by语句
- 优化group by语句
- 优化嵌套查询
- 优化or条件
- 优化分页查询
- 使用SQL提示
- USE INDEX
- IGNORE INDEX
- FORCE INDEX
- 调整max_connections
- 调整back_log
- 调整table_open_cache
- 调整thread_cache_size
- 调整innodb_lock_wait_timeout
- 通过拆分提高表的访问效率
- 垂直拆分
- 水平拆分
- 逆范式理论
- 数据表设计的规范程度称之为范式(Normal Form)
- 1NF:列不能再拆分
- 2NF:所有的属性都依赖于主键
- 3NF:所有的属性都直接依赖于主键(消除传递依赖)
- BCNF:消除非平凡多值依赖
- 数据表设计的规范程度称之为范式(Normal Form)
- 使用中间表提高统计查询速度
- 主从复制和读写分离
- 配置MySQL集群