-
所谓的垂直拆分,就是把原来一个有很多列的表拆分成多个表,这解决了表的宽度问题。通常垂直拆分可以按以下原则进行:
把不常用的字段单独存放到一个表中。
把大字段独立存放到一个表中。
把经常一起使用的字段放到一起。
查看全部 -
思考:反范式化后再查询订单信息
SELECT a.用户名,a.电话,a.地址,a.订单ID, a.订单价格 FROM `订单表` a
查看全部 -
对下面的表进行反范式化后
查看全部 -
思考:如何查询订单信息?
SELECT b.用户名,b.电话,b.地址,a.订单ID, SUM(c.商品价价*c.商品数量)as 订单价格 FROM `订单表` a JOIN `用户表` b ON a.用户ID=b.用户ID JOIN `订单商品表` c ON c.订单ID=b.订单ID GROUP BY b.用户名,b.电话,b.地址,a.订单ID
查看全部 -
反范式化是指为了查询效率的考虑把原本符合第三范式的表适当的增加冗余,以达到优化查询效率的目的,反范式化是一种以空间来换取时间的操作。
查看全部 -
表的范式化和反范式化
查看全部 -
不符合第三范式要求的表存在下列问题:
数据余:(分类,分类描述)对于每一个商品都会进行记录
数据的插入异常
数据的更新异常
数据的删除异常
查看全部 -
范式化是指数据库设计的规范,目前说到范式化一般是指第三设计范式,也就是要求数据表中不存在非关键字段对任意候选关键字段的传递函数依赖则符合第三范式
商品名称 价格 重量 有效期 分类 分类描述 可乐 3.00 250ml 2014.6 饮料 碳酸饮料 北冰洋 3.00 250ml 2014.7 饮料 碳酸饮料 存在以下传递函数依赖关系:(商品名称)->(分类)->(分类描述)
也就是说存在非关键字段“分类描述”对关键字段“商品名称”的传递函数依赖。
查看全部 -
使用 bigint 来 IP 地址,利用 INET_ATON(), INET_NTOA() 两个函数来进行转换
CREATE TABLE sessions(id INT AUTO_INCREMENT NOT NULL, ipaddress BIGINT, PRIMARY KEY(id)); INSERT INTO sessions(ipaddress) VALUES (INET_ATON('192.168.0.1')); SELECT INET_NTOA(ipaddress) FROM sessions;
查看全部 -
使用 int 来存储日期时间,利用 FROM_UNIXTIMEO(), UNIX_ TIMESTAMP() 两个函数来进行转换
CREATE TABLE test(id INT AUTO INCREMENT NOT NULL , timestr INT, PRIMARY KEY (id); INSERT INTO test(timestr) VALUES (UNIX_TIMESTAMP('2014-06-01 13:12:00'); SELECT FROM_UNIXTIME(timestr) FROM test;
查看全部 -
数据类型的选择,重点在于合适二字,如何确定选择的数据类型是否合适?
使用可以存下你的数据的最小的数据类型。
使用简单的数据类型。Int 要比 varchar 类型在 mysql5 处理上简单。
尽可能的使用 not null 定义字段。
尽量少用 text 类型,非用不可时最好考虑分表。
查看全部 -
删除不用索引1234
目前 MySQL 中还没有记录索引的使用情况,但是在 PerconMySQL 和 MariaDB 中可以通过 INDEX_STATISTICS 表来查看那些索引未使用,但在 MySQL 中目前只能通过慢查日志配合 pt-index-usage 工具来进行索引使用情况的分析。
pt-index-usage \ -uroot -p' '\ mysql-slow.log
查看全部 -
查找重复及冗余索引
使用 pt- duplicate-key- checker 工具检查重复及冗余索引
pt-duplicate-key-checker \ -uroot \ -p " \ -h 127.0.0.1
查看全部 -
重复及冗余索引
重复索引是指相同的列以相同的顺序建立的同类型的索引,如下表中
primary key 和 ID 列上的索引就是重复索引 create table test ( id int not null primay key, name varchar (10) not null, titile varchar (50) not null, unique (id) ) engine=innodb;
查看全部 -
在 where 从句,group by 从句,order by 从句,on 从句中出现的列
索引字段越小越好
离散度大的列放到联合索引的前面
SELECT FROM payment WHERE staff_id 2 AND customer_id 584;
是 index(sftaff_id, customer_id)好?还是 index(customer_id, staff_id)好?
由于 customer_id 的离散度更大,所以应该使用 index (customer_id, staff_Id)
查看全部
举报