1.int类型后边的括号中的值并不会影响其存储值的范围,仅仅指示了整数值的显示宽度。例如int(8)和int(10)的存储范围都是-2147483648~2147483647。当你选择了填充零时,才能看出区别。mysql
2.主键自增id适合设置为无符号的int类型,这样最大值能够增长一倍:4294967295(2的32次方减一)。sql
3.要创建索引的字段最好设为NOT NULL,固然其余字段也最好这样作。函数
4.varchar的长度确定时越短越好,不要使用默认的255,更长的列会消耗跟多的内存。性能
5.char类型存储的数据长度小于最大长度时会用空格填充,检索时再剔除,所以若是存入的string最后有空格,查询出来是没有的。优化
6.Memory引擎不支持blob和text类型字段,若是列表查询使用了blob或text的列且使用了临时表排序,那么将会使用磁盘临时表,严重影响性能。设计
7.时间戳格式timestamp和datetime,前者占用空间小(4bytes)且与时区相关,优先使用。除非是范围超过了timestamp的范围(1970~2038),不推荐使用int类型。code
8.推荐使用枚举类型(enum)来替代字符串(如性别男女),但注意其实际存储的是整数(1,2,...对应字段值顺序),排序也是按照整数大小排序,而非映射的字符串。排序
9.常常变更的列不适合使用枚举类型,由于Alert Table对于数据量大的表来讲,性能是不得不考虑的一件事情。索引
10.IPv4地址能够保存为无符号int类型,由于它其实是一个32位的无符号整数,使用mysql函数(INET_ATON和INET_NTOA)进行转换。事务
11.范式与反范式的使用并非绝对性的,须要根据本身的业务和数据量合理折中使用。数据量大查询频率高的时候适当的创建冗余字段减小关联,而数据少关联紧密的场合遵循范式化设计。
12.sql中limit 5
表示搜索前五条记录,limit 5,10
检索6-10条记录,limit 5,-1
表示6-last条记录。
13.多表联查count
统计时,尽可能根据查询条件减小连表的数量,数量越少查询时间越少,少一个表(假如这个表数据量很大或者属于别的库那优化的效果更好)可能减小至少一半的时间。
14.Mysql是不支持嵌套事务
的,开启了一个事务的状况下,再开启一个事务,会隐式的提交上一个事务。要使用嵌套事务能够经过代码控制开启次数计数,最后提交时判断计数。
待续。。。