数据库调优教程(十一) 设计一张漂亮的表

四、           设计一张漂亮的表

上一章讲了如何通过索引来提速我们的查询语句,这一章让我们回到数据库开发的初始阶段,建表。谈谈怎样设计一张漂亮的表。

1.      满足三范式

1NF: 即表的列的具有原子性,不可再分解,即列的信息,不能分解, 只要数据库是关系型数据库(mysql/oracle/db2/informix/sysbase/sqlserver),就自动的满足1NF

数据库的分类

关系型数据库:  mysql/oracle/db2/informix/sysbase/sql server

非关系型数据库:  面向对象或者集合

面向文档数据库:   MongoDB

2NF: 表中的记录是唯一的, 就满足2NF, 通常我们设计一个主键来实现。一般情况下,表中都必须设置主键,并且一般不含业务逻辑,可以设置为自增长。

3NF: 即表中不要有冗余数据, 就是说,表的信息,如果能够被推导出来,就不应该单独的设计一个字段来存放.

有时候为了减少查询次数,可以容忍冗余。

2.      字段数目不要过多

一张表的字段过于庞大,会导致查询时的扫描范围加大,即使你并没有查询相应字段。

所以,如果一张表某个字段,信息量大,但是我们很少查询,则可以考虑把这些字段,单独的放入到一张表中,这种方式称为垂直分割

3.      选择合适的字段类型

在创建表的时候要选取最适用的字段属性。

一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小

举个例子

11位的手机号

有两种类型可以存储

Bigint、char(11)。Int类型最大2147483647不可存

考虑到Bigint占20字节,而char(11)占11*2=22(gbk)或11*3=33(utf-8),所以使用bigInt是最好的。

如果在创建表之后发现表的字段设置不够合理想修改时怎么修改呢?

4.      修改表结构

如果发现表的字段设置不够合理想修改时怎么修改呢,有两种方法。

传统方法

先使用show createtable 查看原先怎样创建字段的

然后就可以根据需要修改了

alter table patent_data modify mingcheng varchar(500) DEFAULT NULL COMMENT '名称';

快速方法(简单粗暴而高效)

创建一个结构是你所需要的空表,关闭mysql,在文件夹中直接复制新生成的表的frm文件替换掉原来表的的frm文件

注:

Frm文件位于mysql安装目录下的   /data/数据库名   目录下

本章结束,下一章将谈谈sql语句的优化方法。

时间: 2024-10-13 06:30:12

数据库调优教程(十一) 设计一张漂亮的表的相关文章

数据库调优教程汇总

前段时间帮公司优化数据库,凭着之前所学,一步一步地将学习知识用于实践,总算是将速度蹭上去了,一个原本要执行1分多钟的查询现在只需要3秒. 这两个星期来把自己所学所思及所用加以总结,发表了关于数据库系列的一系列文章,一方面为自己巩固知识,另一方面也给广大同学以一点点参考. 现将这系列文章进行汇总,方便大家查阅. 本套教程共十三讲. 在这系列的教程中,你将会学到 1.    如何一步步地优化数据库 2.    如何把索引的作用发挥的淋漓尽致 3.    如何解决Mysql在like'%xxx%'模糊

数据库调优教程(十三) MySQL数据库其他优化方法

六.           MySQL数据库其他优化方法 最后一章,谈谈前面没有涉及的一些优化方法. 1.      My.ini配置文件 这里只介绍两个最重要的,其他的不过多介绍. 1)    配置 最大连接数 默认为100,建议设为1000 2)   配置 缓存 在my.ini的[mysqld]节点开启查询缓存,配置如下 query_cache_size = 268435456 query_cache_type = 1 query_cache_limit = 1048576 2.      使

数据库调优教程(一)前言&慢查询定义

前言 最近帮公司优化数据库,凭着之前所学,一步一步地将学习知识用于实践,总算是将速度蹭上去了,一个原本要执行1分多钟的查询现在只需要3秒. 现把自己所学所思及所用加以总结,一方面为自己巩固知识,另一方面也给广大同学以一点点参考. 本套教程共十三讲. 在这系列的教程中,你将会学到 1.     如何一步步地优化数据库 2.     如何把索引的作用发挥的淋漓尽致 3.     如何解决Mysql在like'%xxx%'模糊查询的情况下不使用索引 4.     如何设计一张优质的表 5.     如

数据库调优教程(十二) 优化sql语句

五.           优化Sql语句 上一章讲了如何设计一张好的表,一张好的表自然需要好的sql语句去操作它.本章就来聊聊如何优化sql语句. 1.      Sql语句优化原则 优化需要优化的Query 定位优化对象性能瓶颈 从Explain入手 尽可能在索引中完成排序 只取自己需要的Column 尽可能避免复杂的join和子查询 2.     优化limit select * from test1 order by id limit 99999,10 原语句虽然使用了id索引,但是相当于

数据库调优教程(五) 索引的作用和索引的种类

三.           索引 上一章我们学习了使用explain来生成一个查询执行计划(QEP),从而发现语句存在的问题.在explain返回的结果中,有三个是和索引有关的(possible key.key.extra),可见索引在改善查询效率上的显著地位. 这一章,我们将全方位讲解如何使用索引来优化我们的数据库. 1.      索引的作用 索引的原理是利用特殊的查找算法(如二叉树算法),限制访问的行数,提高访问效率. 另外,索引还可以高效地在表之间建立连接操作,高效的对结果进行排序等等 2

数据库调优教程(二)慢查询数据准备

一.           发现慢查询 上一讲我们谈论了慢查询的定义,这一讲我们来创建一张大表,为慢查询做数据准备. 2.      慢查询数据准备 要想发现慢查询,首先要使慢查询发生.在一张普通数量级的表格中是不能发生慢查询的,除非你对于慢查询的定义时一个毫秒.因此我们必须手动创建一张大数量级的表,这里选择创建一张40万数量级的表(同学们也可以创建百万级的,如果你们的电脑很厉害.但是一般情况下,十万级的数据就可以看出慢查询了). 1)    创建数据库 [plain] view plaincop

数据库调优教程(七)索引的代价

三.           索引 4.      索引的代价 前面几讲介绍了索引在提高性能方面的威力以及如何使用索引,但是索引也是有开销的 1)    占用磁盘空间 如前面所述,索引是有开销的,表现在添加索引后.ibd文件(innodb引擎)或者.myi文件(myisam引擎)会变大. 2)    导致dml操作速度变慢 添加索引后之所以会快,是因为表依据索引对数据按某种算法(二叉树等)进行排序,所以删除.增加.插入后二叉树要重新排序,导致执行效率降低. 此时要看自己的数据库是dml语句执行的多还

数据库调优教程(八) 什么情况下不要使用索引

三.           索引 5.      什么情况下不要使用索引 既然索引是有代价的,那么就不要在不应该使用索引的情况下去使用它. 1)    数据唯一性差的字段不要使用索引 比如性别,只有两种可能数据.意味着索引的二叉树级别少,多是平级.这样的二叉树查找无异于全表扫描. 2)    频繁更新的字段不要使用索引 比如logincount登录次数,频繁变化导致索引也频繁变化,增大数据库工作量,降低效率. 3)    字段不在where语句出现时不要添加索引 只有在where语句出现,mysq

数据库调优教程(十) 【精华章节】解决like ’%str’ 时索引不被使用的4种方法

三.           索引 7.      解决like'%str'不使用模糊查询的4种方法 上一讲最后说了,只要模糊查询的模糊值在字符串前面,则不会使用索引,'%aaa'和'_aaa'都不会! 如下 应该说这是Mysql给程序员们开的一个玩笑.要是我的表数据量很大,而且又需要使用like'%%'这样的模糊查询来检索时,该怎么办?? 接下来,笔者将会给大家分享解决这个问题的四种方法! 1)    Select主键 只要Select的字段刚好是主键,那么就会使用到索引(只对innodb数据库有