数据库性能之表结构优化

一、表结构优化

1、数字类型:存储空间浪费,空间大小不一样,搜索速度也不一样
(1).tinyint 8位 -128~127  unsigned tinyint(0~255)
    int,bigint,能确定不会使用负数的字段,建议添加unsigned定义
(2).固定精度的小数,不建议使用decimal表示,建议乘以固定倍数转换成整数存储,可以大大节省存储空间,且不会带来任何附件维护成本,比如钱都是精确到分,不存3.12元,存312分

2、字符类型:
(1).char类型:定长类型
(2).不定长类型使用varchar,设定适当的最大长度,而不是非常随意的给一个很大的最大长度限定
(3).非万不得已,不要使用text数据类型,其处理方式决定了它的性能低于char或varchar类型的处理
(4).建议使用整形来存储某些特殊的定长字符数据,比如IP地址,这样可以大大的节约存储空间
select inet_aton(‘192.168.100.200‘) --> 3232261320
select inet_ntoa(3232261320) --> 192.168.100.200
采用上面的方式,使用一个int就可以存放IP地址了

3、时间类型:
(1).尽量使用timestamp类型,因为其存储空间只需要datetime类型的一半
(2).对于只需要精确到某一天的数据类型,建议使用date类型,因为他的存储空间只需要3个字节,比timestamp还少
(3).不建议通过int类型存储一个UNIX TIMESTAMP的值,因为这太不直观,会给运维带来不必要的麻烦,同时还不会带来任何好处

4、适当拆分:
    当表中存储类似于TEXT或者是很大的VARCHAR类型的大字段的时候,如果大部分访问这张表的时候都不需要这个字段,就该把这个字段拆分到另外的独立表中,以减少常用数据块所占用的存储空间;
    这样做的一个明显好处就是每个数据块中可以存储的数据条数可以大大增加,既减少物理IO次数,也能大大提高内存中的缓存命中率。

5、适度冗余:
    被频繁引用且只能通关Join 2张(或更多)大表的方式才能得到的独立小字段,但是,需要特别注意的是,冗余的同时需要确保数据的一致性不会遭到破坏,确保更新的同时冗余字段也被更新。

6、尽量使用not null
    尽量确保字段的default值不是null,因为null类型比较特殊,使用null类型会导致SQL语句难以优化

原文地址:https://www.cnblogs.com/TheoryDance/p/10325000.html

时间: 2024-10-28 23:31:17

数据库性能之表结构优化的相关文章

通过jdbc获取数据库中的表结构

通过jdbc获取数据库中的表结构 主键 各个表字段类型及应用生成实体类 1.JDBC中通过MetaData来获取具体的表的相关信息.可以查询数据库中的有哪些表,表有哪些字段,字段的属性等等.MetaData中通过一系列getXXX函数,将这些信息存放到ResultSet里面,然后返回给用户.关于MetaData的说明网上也有不少,这里我只是从我自身学习的角度来记录一下简单使用JDBC以及获取数据表相关信息的方法. DatabaseMetaData dbmd = con.getMetaData()

通过 jdbc 分析数据库中的表结构和主键外键

文章转自:http://ivan4126.blog.163.com/blog/static/20949109220137753214811/ 在某项目中用到了 hibernate ,大家都知道 hibernate 是 ORM 框架,他是有能力根据实体生成数据库表的.我们在单元测试的时候用到了 dbUnit ,dbUnit 可以帮助我们在测试前把数据库的测试数据准备好,然后我们就利用现成的数据库环境测试,测试完成后需将数据库中的所有数据清除(为了不影响其他的单元测试),然后接着下一个测试.虽然已经

查询SQLServer2005中某个数据库中的表结构、索引、视图、存储过程、触发器以及自定义函数

查询SQLServer2005中某个数据库中的表结构.索引.视图.存储过程.触发器以及自定义函数 2013-03-11 09:05:06|  分类: SQL SERVER|举报|字号 订阅 (1)查询SQLServer2005中某个数据库中的表结构 SELECT TOP 100 PERCENT --a.id,CASE WHEN a.colorder = 1 THEN d.name ELSE '' END AS 表名,CASE WHEN a.colorder = 1 THEN isnull(f.v

Toad导出数据字典,把数据库所有的表结构导出到htm中

Toad导出数据字典,把 数据库所有的表结构导出到htm中 第一步: 第二步:选择数据库 第三步:选择路径和设置其它配置 第四步:生成成功后, 系统会弹出提示框询问是否打开. 最终生成的表框架效果如下图所示: 在写软件文档时常常需要数据字典,用这个方法能够快速提取表结构.

如何导出远程oracle数据库中的表结构

从远程oracle数据库上导出指定表的表结构语句有两种方法: 方法一:通过sql语句获得 1,make sure that you can connect the remote database. 2,enter into the sqlplus,and execute the command: select dbms_metadata.getddl('TABLE',tablename) from user_tables and you will get all the tables defin

实体类(JavaBean)一般都是和数据库中的表结构一一对应

实体类(JavaBean)一般都是和数据库中的表结构一一对应 本节希望实现的是,一个java类,能和数据库对应上,然后操作数据库. 实体类 JavaBean有特定的写法 必须要有一个无惨构造 属性必须私有化 必须有对应的get/set方法 一般用来和数据库的字段做映射 ORM ORM:对象关系映射 表--->类 字段--->属性 行记录--->对象 id name age address 1 桐人 22 日本 2 亚丝娜 22 日本 3 爱丽丝 22 日本 class People{  

mySQL表结构优化

前言 很多人都将<数据库设计范式>作为数据库表结构设计"圣经",认为只要按照这个范式需求设计,就能让设计出来的表结构足够优化,既能保证性能优异同时还能满足扩展性要求.殊不知,在N年前被奉为"圣经"的数据库设计3范式早就已经不完全适用了.这里我整理了一些比较常见的数据库表结构设计方面的优化技巧,希望对大家有用. 由于MySQL数据库是基于行(Row)存储的数据库,而数据库操作 IO 的时候是以 page(block)的方式,也就是说,如果我们每条记录所占用

MySQL详解(22)------------表结构优化

很多人都将 数据库设计范式 作为数据库表结构设计"圣经",认为只要按照这个范式需求设计,就能让设计出来的表结构足够优化,既能保证性能优异同时还能满足扩展性要求.殊不知,在N年前被奉为"圣经"的数据库设计3范式早就已经不完全适用了.此课时整理了一些比较常见的数据库表结构设计方面的优化技巧,希望对大家有用. 由于MySQL数据库是基于行(Row)存储的数据库,而数据库操作 IO 的时候是以 page(block)的方式,也就是说,如果我们每条记录所占用的空间量减小,就会

运用Java递归获取数据库的目录表结构

数据库设计 现在要设计一个目录数据库表,即一个表中存有根目录和各级子目录,这时候我们可以设计一张表,用parent_id来存储子目录对应的父目录的序号,设计表如下: 表的字段类型: +-----------+----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------+---------------------