mysql中有sa_SA工作-mysql设计规范

表的设计

字段尽量设置not null,mysql的null值和空字符串不一样,null值占用空间,空字符串不占用空间。Null值占用空间,比较时会参与比较,但b树索引不会存储null值,因此当索引的字段包含null值,效率会下降。

一般没有业务因素影响,采用数值型的自增长列作为主键。

Mysql的字段设计需要集约化,越小的占用存储空间越好,能数值不字符,能日期不字符。

注意Mysql的varchar类型要计算好长度,因为mysql在表被查询后会把表信息缓存到内存中,在内存中申请是按照最大长度申请。

将不常用的字段或大字段从主表拆分出来放到子表,通过主键关联访问;对于核心访问频度极高的表,需要反范式设计,增加冗余字段,减少与其它表的join操作。

索引的设计

主键字段尽量短,数值型是较好的选择。Mysql innodb单列索引默认情况下限制长度767,使用utf8字符集,长度限制为255。

当查询包含的条件和字段很少时,可以创建覆盖索引。这样数据可以全部在索引中获得,将不再回表。

当需要在长文本字段上创建索引时,可以考虑增加一个虚拟hash列,采用crc32计算一个hash值,针对这个列创建索引。只用这个索引做等值查询,索引的空间占会小很多。

组合索引在多列上创建,单列索引在一个列上创建。

查询使用索引的条件不同一般组合索引需要按照“最左前缀”来执行查询,并不是每个列都需要覆盖,只是从左边的列开始组合。

例如有索引key(a,b,c)

where a=xx and b=xx and c=xxx 此语句可以用到索引

where b=xx and a=xx and c=xxx 同上,顺序没有关系,同样能用到索引

where a=xx and b=xx 可以用到索引

where a=xx and c=xx 可以用到索引

where b=xx and c=xx 用不到索引 where b=xx 用不到索引 where c=xx 用不到索引

Innodb只支持索引组织表,为了提高系统的性能,增加查询速度,所以要建立索引.

好处:   1) 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性

2) 大大加快数据的检索速度

3) 可以加速表和表之间的连接,特别是在实现数据的参考完整性方

4) 在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间

开发管理项目中的索引应用,使用到普通索引、唯一索引、主键索引、组合索引.

例如:

1)sp_issue.product产品字段,时常做为查询条件:设置字段不为NULL,且增加索引

ALTER TABLE sp_issue MODIFY product VARCHAR(100) NOT NULL;

ALTER TABLE sp_issue ADD INDEX INX_PRODUCT (PRODUCT);

2)人员权限表sp_user_priv无主键,留着普通索引,建联合主键.

alter table sp_user_priv add constraint pk_sp_user_priv primary key (user_code,priv_type,priv_value);

序号

常用Oracle数据类型对应MySQL数据类型

Oracle

MySQL

1

TIMESTAMP(6)

DATETIME(6)或timestamp(6)

2

NUMBER

int or bigint

3

CHAR

char

4

CLOB

text or varchar

5

DATE

datetime

6

RAW

char

7

VARCHAR2

vharchar

8

BLOB

blob

数值型字段尽量不用字符类型存储

原因:UTF-8 下:mysql下 VARCHAR(20)  ;表明字段可以存放20个字符,若中文则是占用60个byte(1中文=3BYTE),若英文或者数字则为占用20个byte。

INT 大小为4 字节(定义), 存储的数值范围是 (0,4 294 967 295), 即只要存储的数值是这个范围内,永远都是占用4个BYTE。

假设 存放 1000这样一个值, 如果存放到数据类型VARCHAR中, 那么就是 1000个byte,就是1kb大小

而存放到 int中,就只是占用4个byte,即只有0.004KB,差距很大。

字段不设置为NULL

当字段时常做为查询条件时,设置改字段不为NULL,可以设置默认值来填充方式.

原因:1)MySQL的NULL不等于空字符串;WEB开发的时候,如果有的地方插入记录是指定空字符串,有的地方插入记录没有指定值,查询=’’的时候就会过滤掉为(NULL)的数据

2)索引不会包含有NULL值的列 只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL

例如:设置sp_issue.product 不为NULL

ALTER TABLE sp_issue MODIFY product VARCHAR(100) NOT NULL;

2.1 数值型字段尽量不用字符类型存储

原因:UTF-8 下:mysql下VARCHAR(20)  ;表明字段可以存放20个字符,若中文则是占用60个byte(1中文=3BYTE),若英文或者数字则为占用20个byte。

INT 大小为4字节(定义), 存储的数值范围是(0,4 294 967 295), 即只要存储的数值是这个范围内,永远都是占用4个BYTE。

假设 存放 1000这样一个值, 如果存放到数据类型VARCHAR中, 那么就是1000个byte,就是1kb大小

而存放到 int中,就只是占用4个byte,即只有0.004KB,差距很大。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472116.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

天池 在线编程 最大子树(自底向上)

文章目录1. 题目2. 解题1. 题目 描述 给你一棵二叉树,找二叉树中的一棵子树,他的所有节点之和最大。 返回这棵子树的根节点。 我会把你返回的节点作为最优子树的树根来打印。 数据保证有且仅有唯一的解。 示例 样例 1: 输入: {1,-5,2,0,3,-4,-5} 输出…

sql随机抽取数据50条_MySQL中随机抽样

2.9 随机抽样在审计或IT审计中,常常使用抽样,也就是对具有审计相关性的总体中低于百分之百的项目实施审计程序,使所有抽样单元都有被选取的机会,为注册会计师针对整个总体得出结论提供合理基础。简单来说,就是我们需要…

mysql pdo 事务处理_php中pdo的mysql事务处理实例

phpmysql事务处理的几个步骤:1.关闭自动提交2.开启事务处理3.有异常就自动抛出异常提示再回滚4.开启自动提交注意:mysql只有这个InnoDB驱动是支持事务处理的&#xff0c;默认MyIsAM驱动不支持.下面是实例代码&#xff1a;<?php try{$pdonew pdo("mysql:hostlocalhost;…

spring手动回滚事务_Spring总结---gt;03

什么是事务逻辑上的一组操作&#xff0c;组成这组操作的各个单元&#xff0c;要么全都成功&#xff0c;要么全都失败。事务的特性原子性&#xff1a;事务不可分割一致性&#xff1a;事务执行前后数据完整性保持一致隔离性&#xff1a;一个事务的执行不应该受到其他事务的干扰 持…

java-设计模式(结构型)-【代理模式】

1.代理模式(ProxyMode) 定义&#xff1a;外观模式是对类与类之间关系的描述&#xff0c;而代理模式是对原来的方法添加其他的操作。 代理有“网关”的含义&#xff0c;比如用户访问论坛&#xff0c;则要经过代理(网关)授权给你才能访问&#xff0c;即 游客和注册用户的权限不同…

mysql建表_128、mysql建表和简单sql

EMPLOYEES, 有四个字段&#xff0c;EMPLOYEE_ID:员工表(主键)、DEPT_ID:部门号、EMPLOYEE_NAME:员工姓名、EMPLOYEE_SALARY:员工工资。建表语句CREATE TABLE EMPLOYEES(EMPLOYEE_ID int not null primary key,DEPT_ID int,EMPLOYEE_NAME char(40),EMPLOYEE_SALARY double);检索…

LeetCode 1893. 检查是否区域内所有整数都被覆盖(差分)

文章目录1. 题目2. 解题1. 题目 给你一个二维整数数组 ranges 和两个整数 left 和 right 。每个 ranges[i] [starti, endi] 表示一个从 starti 到 endi 的 闭区间 。 如果闭区间 [left, right] 内每个整数都被 ranges 中 至少一个 区间覆盖&#xff0c;那么请你返回 true &a…

Log4j乱码

在log4j.properties里添加encoding , 例如 : log4j.appender.fuscentorg.apache.log4j.DailyRollingFileAppender log4j.appender.fuscent.encodingUTF-8 log4j.appender.fuscent.File/Users/kane/Work/log/core/fuscent.log log4j.appender.fuscent.layoutorg.apache.log4j.P…

mysql的where字句调优_mysql中select和where子句优化的总结

本篇文章给大家带来的内容是关于mysql中select和where子句优化的总结&#xff0c;有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你有所帮助。数据库优化:1.可以在单个SQL语句&#xff0c;整个应用程序&#xff0c;单个数据库服务器或多个联网数据库…

数据中台建设与应用_Gartner对于建设数据中台的建议

(文&#xff1a;Gartner高级研究总监 孙鑫)数据中台是中国本土诞生的一个名词&#xff0c;很多企业在“什么是数据中台”和“我要上XX中台”徘徊。其炒作程度跟当年的“大数据” 一词有的一拼&#xff0c;如果用Gartner的炒作周期图来看&#xff0c;数据中台目前已经逼近炒作的…

LeetCode 1894. 找到需要补充粉笔的学生编号

文章目录1. 题目2. 解题1. 题目 一个班级里有 n 个学生&#xff0c;编号为 0 到 n - 1 。 每个学生会依次回答问题&#xff0c;编号为 0 的学生先回答&#xff0c;然后是编号为 1 的学生&#xff0c;以此类推&#xff0c;直到编号为 n - 1 的学生&#xff0c;然后老师会重复这…

C# Excel处理工具

需求&#xff1a;选择一个Excel文件&#xff0c;然后对该Excel文件进行处理&#xff0c;再导出一个处理后的Excel文件。 效果图 声明&#xff1a;我对winform开发不熟&#xff0c;但是我看到许多开发人员做东西只管交差&#xff0c;从不考虑用户体验&#xff0c;也不考虑容错处…

mysql 坚向变横向_(排班表一)使用SQL语句使数据从坚向排列转化成横向排列

知识重点&#xff1a;1.extract(day from schedule01::timestamp)13Extract 属于 SQL 的 DML(即数据库管理语言)函数&#xff0c;同样&#xff0c;InterBase 也支持 Extract&#xff0c;它主要用于从一个日期或时间型的字段内抽取年、月、日、时、分、秒数据&#xff0c;因此&a…

python增加子类的参数_python 子类向父类传递关键字参数

父类构造函数class SoapClient(object):"""Simple SOAP Client (simil PHP)"""def __init__(self, locationNone, actionNone, namespace,certNone, proxyNone, nsNone,soap_nsNone, wsdlNone, wsdl_basedir, ca_certsNone,sessionsFalse, soap_…

LeetCode 1897. 重新分配字符使所有字符串都相等

文章目录1. 题目2. 解题1. 题目 给你一个字符串数组 words&#xff08;下标 从 0 开始 计数&#xff09;。 在一步操作中&#xff0c;需先选出两个 不同 下标 i 和 j&#xff0c;其中 words[i] 是一个非空字符串&#xff0c;接着将 words[i] 中的 任一 字符移动到 words[j] 中…

2015/4/14课堂练习

1.设计题目 书店针对《哈利波特》系列书籍进行促销活动&#xff0c;一共5卷&#xff0c;用编号0、1、2、3、4表示&#xff0c;单独一卷售价8元&#xff0c; 具体折扣如下所示&#xff1a; 本     数量 折扣 …

python 图片背景前景分离_【绝了】用 Python 把朋友头像变表情包!

正文在日常生活中&#xff0c;我们经常会存取一些朋友们的丑照&#xff0c;在这个项目中&#xff0c;我们以萌萌哒的熊猫头作为背景&#xff0c;然后试着在背景图上加入朋友们的照片&#xff0c;效果如下图所示。实现步骤导入朋友的照片(前景照片)&#xff1b;处理前景照片(缩放…

LeetCode 1899. 合并若干三元组以形成目标三元组

文章目录1. 题目2. 解题1. 题目 三元组 是一个由三个整数组成的数组。 给你一个二维整数数组 triplets &#xff0c;其中 triplets[i] [ai, bi, ci] 表示第 i 个 三元组 。 同时&#xff0c;给你一个整数数组 target [x, y, z] &#xff0c;表示你想要得到的 三元组 。 为了…

mysql snowflake_雪花算法-snowflake

雪花算法-snowflake分布式系统中&#xff0c;有一些需要使用全局唯一ID的场景&#xff0c;这种时候为了防止ID冲突可以使用36位的UUID&#xff0c;但是UUID有一些缺点&#xff0c;首先他相对比较长&#xff0c;另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID&a…

nrf52832芯片手册_nRF52832低功耗问题不完全总结

0.前言技术和经历经验都有限&#xff0c;以下内容仅供初学者参考和个人总结记录&#xff0c;不定期更新。都是使能协议栈开启BLE广播的情况协议栈&#xff1a;s132_nrf52_6.1.1SDK&#xff1a;nRF5_SDK_15.3.0_59ac3451.进入低功耗方式nRF52832进入低功耗或保持低功耗方式比较简…