zoukankan      html  css  js  c++  java
  • 数据库和索引设计简要笔记

    列设计规范

    • 正确区分tinting、int、bigint的范围

    • 使用varcher(20)存储手机号,不要使用整数(请求参数可能是字符串,防止类型的隐式转换)

    • 使用int存储ipv4 不要使用char(15)

    • 涉及金额使用decimal/varchar,并指定精度

    • 不要设计为null的字段、而是用空字符,因为null需要更多的空间、并且是的索引和统计变得更为复杂。

     

    索引规范

    • 唯一索引使用uniq_[字段名]来命名

    • 非唯一索引使用idx_[字段名]来命名

    • 不建议在频繁更新的字段上建立索引

    • 单张表的索引数量建议控制在5个以内,索引过多,不仅会导致插入的性能下降,还可能导致mysql的索引出错和性能下降

    • 组合索引字段数量不建议超过5个,理解组合索引的最左匹配原则,避免重复建设索引,比如你建良(x,y,z)相当于你建了(x)(x,y) (x,y,z)

    SQL规范

    • 禁止使用select *,只获取必要字段,select会增加cpu/io/内存、带宽的消耗。

    • Insert 必须指定字段,禁止使用insert into table values()指定字段插入,在表结果变更时,能保证对应用程序无影响。

    • 隐式类型转换会使索引失效,比如:手机号搜索时没有转成字符串

    • 禁止在where后面的列中使用函数或者表达式,导致不能命中索引。

    • 禁止负向查询(!= not like not in等 )以及%开头的模糊查询,导致不能命中索引。

    • 避免直接返回大结果导致造成内存溢出,可以采用分段和游标方式。

    • 返回结果尽量采用limit分页显示。

    • 尽量在order by group by的列上创建索引。

    • 大表扫描尽量放在镜像库上去做。

    • 禁止大表join查询和子查询。

    • 尽量避免数据库内置函数作为查询条件。

    • 如何平滑添加字段?

      在开发时,有时候需要给表增加字段,在大数据量大情况下怎么平滑添加字段。

      1:直接alter table add column数据量大时不建议(会产生死锁)

      2,提前预留字段(不优雅,空间浪费,预留多少很难控制,拓展性差)

      3,新增一张表(增加字段),迁移原来数据,再重新命名新表作为原表。

      4,放入extinct(无法使用索引)

      5,提前设计,使用key/value方法存储(缓存设计),新增字段时,直接加一个key就好了(优雅,redis也可以持久化)

    ----------天道酬勤----------------
  • 相关阅读:
    Spring事务传播机制
    关于MyBatis-Like的模糊查询,">"、"<"等需转义字符描述
    MyBatis中if
    报错(持续.....)
    爬虫报错(持续.....)
    django的timezone问题
    dispatch
    django + uwsgi + nginx 实现高并发环境部署 及 报错处理
    虚拟机问题(持续更新.......)
    Tornado
  • 原文地址:https://www.cnblogs.com/jiliunyongjin/p/15689604.html
Copyright © 2011-2022 走看看