数据库建表总结

来源:互联网 发布:淘宝皇冠号多少钱 编辑:程序博客网 时间:2024/06/08 05:37

    今天因为双11业务的原因,认真建了一次表。终于不是只为实现业务,只为crud而轻易定表。感觉做任何事情都不要潦草,作为一个女程序猿真是惭愧哈哈(笑没脸~)。

    好了总结学习内容如下:

1.表字段 not null:为 ' ' 、0、empty string、‘0000-00-00 00:00:00’;总之不可为空;status、type仅表状态类的字段,thyint存储1btyes即可(特别说明下 int类型存储4btyes。int(M) M是最大显示宽度,与存储空间大小无关);

2.索引:1)组合索引的最左原则,无条件最左原则。

        2)order by 字段 需建在组合索引中,否则 using filesort 额外排序 。

        3)多字段建立组合主键索引,保证唯一性。

        4)索引类型:normal就是普通;unique顾名思义,唯一,比如身份证号就可以选择唯一,能选unique不选normal~;full text这个从没用过,是对于长篇文字~

        5)Hash 和 B-tree索引的区别

优点:hash在一定情况下效率高,因为不需要多次IO读取,可以一步到位。      

(hash是通过计算所得的hash值与行指针一并存入hash表)。

缺点:局限性太多。

<1>不支持Order by 排序。

计算之后的Hash值的大小并不一定与之前的键值完全一样。

<2>仅满足“=”,“IN”和“<=>”查询,不能使用范围查询。

因为它是Hash值啊~

<3>B-Tree的组合索引很好用吧,最左原则,Hash就不行了,不能利用部分索引进行查询。

<4>Hash 索引遇到大量Hash值相等的情况后性能并不一定就会比B-Tree索引高。
对于选择性比较低的索引键,如果创建 Hash 索引,那么将会存在大量记录指针信息存于同一个 Hash 值相关联。这样要定位某一条记录时就会非常麻烦,会浪费多次表数据的访问,而造成整体性能低下。

<5>Hash 索引在任何时候都不能避免表扫描。
前面已经知道,Hash 索引是将索引键通过 Hash 运算之后,将 Hash运算结果的 Hash 值和所对应的行指针信息存放于一个 Hash 表中,由于不同索引键存在相同 Hash 值,所以即使取满足某个 Hash 键值的数据的记录条数,也无法从 Hash 索引中直接完成查询,还是要通过访问表中的实际数据进行相应的比较,并得到相应的结果。

    今天就这些吧,希望每天都能有这点时间沉淀回归最底层,记录自己的成果~来,感慨下~

    猿的道路上,也需要本着一颗纯真之心,以清晰的头脑,理清需求的犄角旮旯,站在比较的高的角度上进行部署。

    其实瀑布式开发是难以避免的,但在初期,一定要帷幄好。不仅为实现而实现,还要考虑性能以及拓展,不知道菜鸟般的我以后再看到这段话会不会嘲笑自己哈哈哈,over~


 

原创粉丝点击