zoukankan      html  css  js  c++  java
  • Schema与数据类型优化

    Schema与数据类型优化

    1、选择优化的数据类型

             应该尽量使用可以存储数据的更小的数据类型。更小的数据类型通常更快,占用更少的磁盘、内存、缓存。

    2、简单最好

             整型比字符型要好,两个例子,应该使用Mysql内建的类型来存储日期而不是字符串;使用整形存储Ip地址。因为字符的校对、排序规则要复杂。

    3、尽量避免使用Null。

             因为可为Null的列使得索引和索引统计和值的比较变得复杂。

    4、整数类型

    整数类型分为:tinyint、smallint、mediumint、int、bigint。Mysql可以整数类型制定宽度,但对大多数应用来说是没有意义的,对于存储和计算来说INT(1)和INT(20)是相同的。

    5、实数类型

             因为CPU不支持对decimal的直接计算,因此Mysql5.0以上的版本中Mysql自己实现了Decimal的计算。Decimal需要额外的开销,只有需要精确计算时才选用。

             可以考虑用BigInt代替decimal,假设要存储的财务数据精确到万分之1,可以把所有金额乘以100万,然后将结果存储到bigint里面,这样可以同时避免浮点运算不精确和decimal精确计算代价高等问题。

    6、字符串类型

             Varchar存储可变长字符串。

             当列的更新很少,使用了像UTF-8这样复杂的字符集时,使用varchar存储。

             Char类型是定长的,当存储MD5值,定长的值,或经常变更的数据时,用char存储,因为这样不容易产生碎片。

             数据如何存储取决于存储引擎。

    7对Schema进行范式化也可以带来好处。范式化更新操作通常比反范式要快。范式化只有很少或没有重复数据。范式化的缺点是需要关联,这可能会使得一些索引策略无效。范式和反范式各有优劣,在实际中经常二者混用。

    8、更快的读、更慢的写。

    9、计数器表

    如果在表中保存计数器,更新计数器时可能遇到并发问题?怎么办呢,可以设计成100行,每次更新计数器随机的选择一行进行更新,统计的时候计算sum就可以了。

    10、加快ALTER TABLE的操作速度。

  • 相关阅读:
    ASP.NET Web API(二):安全验证之使用HTTP基本认证
    对象映射工具AutoMapper介绍
    分享一个基于Bootstrap的 ACE框架 入门(MVC+EF)
    C/C++资料网站
    C++基础:二维数组动态的申请内存和释放内存
    基于dijkstra算法求地铁站最短路径以及打印出所有的路径
    最短路径算法
    Android学习_ContentProvider
    Android_ListActivity使用注意
    Android_Adapter与ListView
  • 原文地址:https://www.cnblogs.com/liun1994/p/5103462.html
Copyright © 2011-2022 走看看