SQL表设计


 

1.一些情况下显示主键索引便于查找,提高查询效率

2.自增;UUID可能出现页分裂,产生表碎片,性能不好(插入时间长、占用空间大)

3.有业务含义可能涉及内容的修改,数据在磁盘的储存位置可能发生变更;且有业务含义的情况下主键不是顺序自增的,可能存在新插入的数据没有先前插入的数据大的情况,这两种情况可能导致页分裂、产生空间碎片

4.一般用tinyint型,enum order by操作效率低,需要额外操作,且当存储数字时不利于操作(如:0 ,‘0’)

5.精确到分可以用int,以元为基本单位用decimal(不用以二进制储存的float和double,存在误差)

6.varchar 直观,但插入数据没有校验(存在歧义2019111),时间比较运算复杂;timestamp 4字节 支持跨时区,但范围有限 1970~2038;datetime 8字节 范围大,但不支持跨时区;bigint 8字节 表示范围大,但需要自己维护,不方便

7.效率低;一般用HDFS(Hadoop File System)储存;mysql提供两种存储大文件的类型text和blob但不常用,因为内存临时表不支持,查询时只能使用磁盘临时表,查询效率低,以及数据内容大,binlog内容多导致主从同步效率低

8.索引性能不好,增加数据库使用开销;查询时可能出现不可预料的结果,而浪费时间排查bug

 

PS:自增主键用完(通常不会出现这种情况就已经分库分表),mysql5.6以后的版本可以通过改从库表结构(如BigInt)再主从切换解决(可能出现数据丢失的情况)

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM