zoukankan      html  css  js  c++  java
  • MySQL的一些小细节

    1.int类型后边的括号中的值并不会影响其存储值的范围,仅仅指示了整数值的显示宽度。例如int(8)和int(10)的存储范围都是-2147483648~2147483647。当你选择了填充零时,才能看出区别。

    2.主键自增id适合设置为无符号的int类型,这样最大值可以增加一倍:4294967295(2的32次方减一)。

    3.要建立索引的字段最好设为NOT NULL,当然其他字段也最好这样做。

    4.varchar的长度肯定时越短越好,不要使用默认的255,更长的列会消耗跟多的内存。

    5.char类型存储的数据长度小于最大长度时会用空格填充,检索时再剔除,因此如果存入的string最后有空格,查询出来是没有的。

    6.Memory引擎不支持blob和text类型字段,如果列表查询使用了blob或text的列且使用了临时表排序,那么将会使用磁盘临时表,严重影响性能。

    7.时间戳格式timestamp和datetime,前者占用空间小(4bytes)且与时区相关,优先使用。除非是范围超过了timestamp的范围(1970~2038),不推荐使用int类型。

    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是不支持嵌套事务的,开启了一个事务的情况下,再开启一个事务,会隐式的提交上一个事务。要使用嵌套事务可以通过代码控制开启次数计数,最后提交时判断计数。

  • 相关阅读:
    poj2942 点-双联通+二分图染色
    poj1523割顶-点双联通
    poj3694 边-双连通分量+lca
    poj3177边-双连通分量
    poj3352 边-双联通分量
    Codeforces Round #377 (Div. 2) F
    Educational Codeforces Round 30D. Merge Sort
    洛谷p3369 treap
    hdu3572线性欧拉筛
    HYSBZ
  • 原文地址:https://www.cnblogs.com/nandi001/p/12909164.html
Copyright © 2011-2022 走看看