MySQL优化(一):表结构优化
目录
- 表优化
- 数据类型的选择
- 避免列的值为NULL
- VARCHAR和CHAR
- 日期和时间类型
- 选择标识符(主键)的类型
- 错误的表结构
- 一张表中有太多列
- 太多的关联
- 适当建立冗余数据
- 混用范式和反范式
- 建立缓存表和汇总表
- 参考
表优化
此文章用于记录《高性能MySQL》一书的知识点。
数据类型的选择
避免列的值为NULL
查询包含值为
NULL
的列,会使索引、索引统计和值比较更加复杂,如果计划在列上建索引,就应该尽量避免索引列含有NULL
值在保证足够的范围内,选择最小、最简单的数据类型
更小的数据类型占用更少的磁盘、内存和CPU缓存、处理也更快VARCHAR和CHAR
日期和时间类型
DATETIME
使用8字节,不能自动根据时区转换TIMESTAMP
使用4字节,值与时区有关,会自动转换
通常情况下应尽量使用
TIMESTAMP
,因为它的空间效率更高
选择标识符(主键)的类型
在满足足够的范围需求,并且预留未来增长空间的前提下,应选择最小、最简单的数据类型
- 整数通常是标识列最好的选择,因为整数不仅快而且可以使用自增等特性
- 应避免使用字符串作为标识列
- 原因:
- 字符串更消耗空间,同时比较时比数字类型慢
- 随机的字符串如:MD5、SHA1或者UUID,插入新数据时会随机地插入到索引的不同位置,导致页分裂、磁盘随机访问。
错误的表结构
一张表中有太多列
MySQL的存储引擎需要在服务器层与存储引擎层之间通过行缓冲格式拷贝数据,然后在服务器层将缓冲内容解码成各个列。过多的列会导致上述过程转换代价过高。
太多的关联
适当建立冗余数据
混用范式和反范式
范式化的表,更新更快,同时只有很少或没有重复的数据,表更小,但是查询时通常需要昂贵的关联操作,可能导致部分索引失效,而反范式会增加冗余数据但可以减少或避免关联操作。
建立缓存表和汇总表
参考
《高性能的MySQL》
MySQL优化(一):表结构优化相关推荐
- mysql 优化表_mysql里sql优化和表结构优化
开启慢查询日志 计入sql show variables like 'slow_query_log';//慢查询查看状态 OFF未开启 ON开启 show variables like '%log%' ...
- mysql 结构优化建议_MySQL优化之表结构优化的5大建议(数据类型选择讲的很好)...
殊不知,在N年前被奉为"圣经"的数据库设计3范式早就已经不完全适用了.这里我整理了一些比较常见的数据库表结构设计方面的优化技巧,希望对大家有用. 由于MySQL数据库是基于行(Ro ...
- mysql性能调优与架构设计 51cto_MySQL 数据库性能优化之表结构优化
很多人都将 数据库设计范式 作为数据库表结构设计"圣经",认为只要按照这个范式需求设计,就能让设计出来的表结构足够优化,既能保证性能优异同时还能满足扩展性要求.殊不知,在N年前被奉 ...
- mysql 大表更新数据类型_MySQL优化之表结构优化的5大建议(数据类型选择讲的很好)...
殊不知,在N年前被奉为"圣经"的数据库设计3范式早就已经不完全适用了.这里我整理了一些比较常见的数据库表结构设计方面的优化技巧,希望对大家有用. 由于MySQL数据库是基于行(Ro ...
- java 修改mysql数据库表结构_MYSQL数据库表结构优化方法详解
摘要:这篇MySQL栏目下的"MYSQL数据库表结构优化方法详解",介绍的技术点是"mysql数据库表结构.MySQL数据库.数据库表结构.MySQL.据库表结构.数据库 ...
- SQL巩固以及数据库、表结构优化
SQL巩固&数据库.表结构优化 前言 对于初级程序开发工程师而言,SQL是很多人的弱项,为此我给大家来做一下总结,希望能够帮到你们. 课程说明 1.介绍项目实战开发过程中常用的MySQL函数及 ...
- MySQL分库分表和优化
第九阶段模块三 分库分表技术之MyCat 1.海量存储问题 1.1 背景描述 随着互联网的发展,数据的量级也是成指数的增长,从GB到TB到PB.对数据的各种操作也是愈加的困难,传统的关系性数据库已经无 ...
- mysql导出oracle_如何将mysql中的表结构导出放入oracle中
展开全部 将mysql中的表结构导出放入oracle中的方法: 1.导出mysql的表结构sql脚本,然后修改mysql中的数据类型为oracle中的数据类型: MySql与Oracle数据类型的62 ...
- MYSQL的修改表结构SQL语句
MYSQL的修改表结构SQL语句: -- 查看创表语句 SHOW CREATE TABLE t_login; -- 查看表结构 desc t_login1; -- 增加列 ALTER TABLE t_ ...
最新文章
- php 腾讯云实时音视频,腾讯云视频 -实时音视频学习日志
- oracle给每行加上序号,Oracle 根据分类字段给查询结果添加序号
- 详细讲解Java中log4j的使用方法
- 软件测试菲律宾,英雄联盟手游菲律宾测试资格怎么得 菲律宾测试资格获取攻略[多图]...
- C. Jon Snow and his Favourite Number DP + 注意数值大小
- ubuntu16.04更改python版本
- Caffe中如果高效实现卷积层
- 细数嵌入式开发与通用系统开发的不同
- python随机函数random要导入哪个包_python学习之随机函数random
- win32开发(图形绘制)
- Linux下DNS服务器的基本搭建
- 14个非常有用的jquery技巧,注意事项和最佳实践
- 软路由硬件, 研究了一圈还是J1900 , i211网卡又如何
- 利润分配计算机公式,利润与利润分配表计算公式大全
- 【强化学习】动态规划
- 【CSDN英雄会】黄帅:安全不是独行侠而是系统性的运维过程
- ROS 清理log文件
- MayaToUE4之影视动画制作流程
- 反击爬虫,前端工程师的脑洞可以有多大?
- mac 使用launchctl 开机时加速vim、emacs
热门文章
- 牛客挑战赛47 C 条件(Floyd bitset优化)
- AGC038D - Unique Path(建图)
- Educational Codeforces Round 107 (Rated for Div. 2)
- 人工智能——图像分析第二期练习
- 【每日一题】8月17日题目精讲-[SCOI2009]生日礼物
- YBTOJ:卖猪问题(网络流)
- 【做题记录】统计区间(哈希/扫描线)
- #6029. 「雅礼集训 2017 Day1」市场(势能,区间除)
- codeforces1451 D. Circle Game
- K8S Learning(4)——Namespace