1. 索引的维护及优化
- 删除不用的索引, 目前MySQL中还没有记录索引的使用情况 , 但是在 PerconMySQL 中目前只能通过慢查询日志配合
pt-index-usage
工具来进行索引使用情况的分析.1
2
3pt-index-usage \
-uroot -p'密码' \
mysql-slow.log
2. 数据库结构优化
- 选择合适的数据类型
数据类型的选择 , 重点在于合适二字 , 如何确定选择的数据类型是否合适 ?
1 . 使用可以存下你的数据的最小的数据类型 .
2 . 使用简单的数据类型 , Int 要比 varchar 类型在 mysql 上处理简单 .
3 . 尽可能的使用 not null 定义字段 .
4 . 尽量少用 text 类型 , 非用不可时最好先考虑分表 .
example :
1 . 使用 init 来存储日期时间 , 利用FROM_UNIXTIME()
, UNIX_TIMESTAMP()
两个函数来进行转换 .
1 | CREATE TABLE test( |
将格式化时间转为时间戳存入数据库
1
INSERT INTO test(timestr) VALUES(UNIX_TIMESTAMP('2018-01-13 12:00:00'));
将时间戳格式化
1
SELECT FROM_UNIXTIME(timestr) FROM test;
2 . 使用 bigint 存储 IP 地址 , 利用
INET_ATON()
,INET_NTOA()
两个函数来进行转换 .1
2
3
4
5CREATE TABLE sessions(
id int auto_increment not null ,
ipaddress bigint ,
primary key(id)
)转化为纯数字 insert
1
INSERT INTO sessions(ipaddress) VALUES(INET_ATON('192.168.0.1'));
格式化为 IP 格式
1
SELECT INET_NTOA(ipaddress) from sessions;
表的范式化和反范式化
范式化是指数据库设计的规范 , 目前说到范式化一般是指第三设计范式, 也就是要求数据表中不存在非关键字段的传递函数依赖则符合第三范式.
存在以下传递函数依赖关系 :
( 商品名称 ) -> ( 分类 ) -> (分类描述)
也就是说存在费关键字段 “分类描述” 对关键字段 “商品名称” 的传递函数依赖.反范式化是指为了查询效率把原本符合第三范式的表适当的增加冗余, 已达到优化查询效率的目的, 反范式化是一种以空间换取时间的操作.