mysql注意

MySQL中的锁(超级详细,上万字的笔记)_haust_允谦的博客-CSDN博客

【第四篇】MySQL事务详解【重点】___奋斗的卡卡的博客-CSDN博客

MySQL优化学习日记8——避免索引失效的一些原则_herb.dr的博客-CSDN博客

掌门 MySQL 数据库规约落地及优化实战

char

图片路径长度

mysql 储存图片的url 最好用什么字段,长度是多少
varchar 类型就可以了,长度一般 255 即可

varchar

https://blog.csdn.net/weixin_40575457/article/details/87905552

MySql varchar类型,插入的数据超过设置的长度时,超出的部门将会被截取。

varchar所指的自动增长,并不可能超出你所赋与的范围,超出范围的,会被自动截取掉。

它的自动增长,其实应该说是自动缩放,不到你赋的20的,例只有13,他只存13位,而 char无论实际是多少,都会存20。

自动增长只有TINYTEXT,text可以了。

者注:当存储CHAR值时,MySQL会删除所有的末尾空格? 
1、CHAR是定长字符串,若CHAR(10)存储”hello”,MySQL服务器层会在末尾用5个空格补全。 
2、若CHAR(10)存储”hello “,MySQL服务器层会在末尾用4个空格补全。 
3、MySQL无法判断字符串末尾的空格来源,所以删除末尾空格。
————————————————
版权声明:本文为CSDN博主「一任天然」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yirentianran/article/details/79318103

当我们为字符串类型的字段选取类型的时候,判断该选取VARCHAR还是CHAR,我们可以从以下几个方面来考虑:

该字段数据集的平均长度与最大长度是否相差很小,若相差很小优先考虑CHAR类型,反之,考虑VARCHAR类型。
若字段存储的是MD5后的哈希值,或一些定长的值,优先选取CHAR类型。
若字段经常需要更新,则优先考虑CHAR类型,由于CHAR类型为定长,因此不容易产生碎片。
对于字段值存储很小的信息,如性别等,优先选取CHAR类型,因为VARCHAR类型会占用额外的字节保存字符串长度信息。
总之一句话,当我们能够选取CHAR类型的时候,或者说空间消耗相对并不是影响因素的重点时,尽量选取CHAR类型,因为在其他方面,CHAR类型都有着或多或少的优势。而当空间消耗成为了很大的影响因素以后,我们则考虑使用VARCHAR类型。

原文链接:https://blog.csdn.net/weixin_42570248/article/details/89786882

MySql中varchar(10)和varchar(100)的区别==>>以及char的利弊

MySql中varchar(10)和varchar(100)的区别==>>以及char的利弊_imzoer的博客-CSDN博客_varchar100和200有什么区别

这VARCHAR(100)与VARCHAR(200)真的相同吗?结果是否定的。虽然他们用来存储90个字符的数据,其存储空间相同。但是对于内存的消耗是不同的。对于VARCHAR数据类型来说,硬盘上的存储空间虽然都是根据实际字符长度来分配存储空间的,但是对于内存来说,则不是。其时使用固定大小的内存块来保存值。简单的说,就是使用字符类型中定义的长度,即200个字符空间。显然,这对于排序或者临时表(这些内容都需要通过内存来实现)作业会产生比较大的不利影响。解释可以参见这里。所以如果某些字段会涉及到文件排序或者基于磁盘的临时表时,分配VARCHAR数据类型时仍然不能够太过于慷慨。还是要评估实际需要的长度,然后选择一个最长的字段来设置字符长度。如果为了考虑冗余,可以留10%左右的字符长度。千万不能认为其为根据实际长度来分配存储空间,而随意的分配长度,或者说干脆使用最大的字符长度。

---------------------------------char------------------------------------------
1、从碎片角度进行考虑,使用CHAR字符型时,由于存储空间都是一次性分配的。为此某个字段的内容,其都是存储在一起的。单从这个角度来讲,其不存在碎片的困扰。而可变长度的字符数据类型,其存储的长度是可变的。当其更改前后数据长度不一致时,就不可避免的会出现碎片的问题。故使用可变长度的字符型数据时,数据库管理员要时不时的对碎片进行整理。如执行数据库导出导入作业,来消除碎片。
2、考虑其长度的是否相近,如果某个字段其长度虽然比较长,但是其长度总是近似的,如一般在90个到100个字符之间,甚至是相同的长度。此时比较适合采用CHAR字符类型。比较典型的应用就是MD5哈希值。当利用MD5哈希值来存储用户密码时,就非常使用采用CHAR字符类型。因为其长度是相同的。另外,像用来存储用户的身份证号码等等,一般也建议使用CHAR类型的数据。
另外请大家考虑一个问题,CHAR(1)与VARCHAR(1)两这个定义,会有什么区别呢?虽然这两个都只能够用来保存单个的字符,但是VARCHAR要比CHAR多占用一个存储位置。这主要是因为使用VARCHAR数据类型时,会多用1个字节用来存储长度信息。这个管理上的开销char字符类型是没有的。

---------------------------------总结---------------------------------------------

二者在磁盘上存储占的空间是一样的。区别有二。第一、一个变长一个固定长度。第二、在内存中的操作方式,varchar也是按照最长的方式在内存中进行操作的。比如说要进行排序的时候,varcahr(100)是按照100这个长度来进行的。

 为什么不建议varchar(256),而是varchar(255)

160 为什么不建议varchar(256),而是varchar(255)_phpstory的博客-CSDN博客_varchar255

在varchar长度接近256时,varchar长度设置成255的好处:

1、方便InnoDB建索引,对于 MyISAM,可以对前 1000 个字节做索引,对于 InnoDB,则只有 767 字节。(来源依据)。255X3=765

2、少申请一个字节,记录字符创长度,一个8位的tinyint,可以表示的无符号数值的范围是,0-255,如果长度超过了255,需要在申请个字节。

alter 

alter table stb_pmview modify column StartviewTime varchar(32);

alter table t c c varchar(300) default null;

InnoDB表快速修改varchar字段长度方案

InnoDB表快速修改varchar字段长度方案_weixin_34149796的博客-CSDN博客

主键分为单列主键和复合主键:

Mysql的主键和索引_sha_dlx的博客-CSDN博客_mysql 主键 索引

  • 单一主键:只用一列来唯一标识一行

联合主键:当使用一列不能唯一表示一行的时候,就要采用多列唯一标识一行,就是复合主键

索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。

索引可以提高查询速度,它就相当于字典的目录,通过它可以很快查询到结果,而不需要进行全表扫描。但过多使用索引会降低更新表的速度,如对表进行INSERT, UPDATE和DELETE时,Msql不仅要保存数据,还要保存索引文件。

索引可分为单列索引和复合索引:

单列索引:只有某一列作为索引,默认为index索引,这一列可以包含重复数据。如果某列不存在重复数据,最好设置成唯一索引unique形式,它比index的索引速度更快。
复合索引:每次检索都需要使用多列进行时,可以把多列设为复合索引。根据多列是否唯一,也分为index索引和unique索引
【注意】对于复合索引:Mysql是从左到右使用索引中的字段,一个查询可以只是用索引的一部分,但必须是左侧部分。如索引是indexName(a,b,c),则可以支持a|a,b|a,b,c3种组合进行查找。
总体来说:主键相当于一本书的页码,索引相当于书的目录。

两者的比较:

主键是一定是唯一性索引,但唯一性索引不一定是主键
数据库管理系统对于主键自动生成唯一索引,所以主键是一个特殊的索引
唯一索引标识索引值唯一,一个表可以有多个唯一索引,但主键只能有一个
主键列不能为空,但唯一索引列可以为空
一张表只能有一个主键,但可以有多个索引

ALTER TABLE `table_name` ADD UNIQUE (`column`) 
ALTER TABLE `stb_info` ADD UNIQUE (`curTime`)    唯一索引

bigint

bigint(10)和bigint(20)的区别 - 程序Dog-NO1 - 博客园

、bigint(10)和bigint(20)的区别在于如果表定义加上zerofill后再客户端显示长度不同,如下:

 MariaDB [test]> create table test2 (id bigint(10) zerofill,   
 -> id1 bigint(20) zerofill);

MariaDB [test]> insert into test2 values(1,2);

MariaDB [test]> select * from test2;

id                   id1
0000000001 00000000000000000002

2、如果在创建bigint字段时,不指定长度,则默认长度为20,如下:

MySQL bigint(20)是什么意思?

MySQL bigint(20)是什么意思?_白杨树的博客-CSDN博客_bigint20 最大值

MySQL中我们建表的时候,类型可以用bigint(20), 这是什么意思呢?

首先我们看bigint, MySQL的整型类型有这样几种:

类型      占用字节

tinyint        1

smallint     2

mediumint 3

int              4

bigint         8

这是决定存储需要占用多少字节,那么后边的数字(M)代表什么意思呢

tinyint(M), M默认为4;

SMALLINT(M), M默认为6;
MEDIUMINT(M), M默认为9;
INT(M),M默认为11;
BIGINT(M),M默认为20.
M表示最大显示宽度, 建表若设置了zerofill(0填充), 会在数字前面补充0.

Mysql的BigInt(20),Int(20)以及Bigint(32)有区别吗?_iteye_17023的博客-CSDN博客

一个INT,占4个字节,跟JAVA中的int一样,即使是有符号也能表达21亿 这么大的数据。 所以平时绝大多数情况,包括大型网站的UID,都用不了这么大的数据,好友关系表可能会超过,关系表可以考虑用BIGINT。还有就是平时时间戳需要用BIGINT。总之,不要轻易用上BIGINT,完全是浪费!

mysql主键int和bigint类型的区别

mysql主键int和bigint类型的区别_weixin_34248258的博客-CSDN博客

有符号int最大可以支持到约22亿,远远大于我们的需求和MySQL单表所能支持的性能上限。对于OLTP应用来说,单表的规模一般要保持在千万级别,不会达到22亿上限。如果要加大预留量,可以把主键改为改为无符号int,上限为42亿,这个预留量已经是非常的充足了。
使用bigint,会占用更大的磁盘和内存空间,内存空间毕竟有限,无效的占用会导致更多的数据换入换出,额外增加了IO的压力,对性能是不利的。

因此推荐自增主键使用int unsigned类型,但不建议使用bigint

为什么很多公司要求 mysql 表主键 id 必须是 long 型?

https://v2ex.com/t/288290

用UUID做主键和用19位的bigint做主键,插入性能那个更ok?

用UUID做主键和用19位的bigint做主键,插入性能那个更ok?_Kevins Danish的博客-CSDN博客_bigint 主键

解惑: 
在公司的机器上跑了30万的数据,建了一个test_sg_student(主键为UUID)和 test_bigintAsString_t (主键为19位的bigint),分别用10个线程和批处理进行插入,发现性能相差接近100倍,很明显是UUID做主键的表插入时间是最慢的,根据底层索引B+树来思考,其实答案也油然生成,UUID的无序和空间占的大小导致插入时候要耗费更多的时间去创建和维护索引
在mysql进行一次全部数据的扫描,也发现uuid做主键的表性能极差,一次查询竟然达到了12秒之巨,哪怕是为UUID建立前缀索引,也仅仅是快了1秒左右,而对插入更是没什么用处

序的单线程表现结果在上面几张图

结论:尽量使用自增的,占内存小的字段作为主键

mysql 表的id 使用自增int和自定义varchar的优缺点以及界限

mysql 表的id 使用自增int和自定义varchar的优缺点以及界限_Cter12138的博客-CSDN博客_id用int还是varchar

总结:由此可见,mysql InnoDB 主键采用自动增长性能较高

总结:由此可见,mysql MyISAM 主键采用自动增长性能比其他有微弱的优势。测试数据为100w,如果是1000W 1亿,我想这个优势会拉大,如果你还有外键关联查询,这个优势就更明显了。当然,如果你设计的系统,数据量还没有超过100W,你用啥主键类型都无所谓。我测试电脑是笔记本,如果是专业的服务器,估计100W条,mysql MyISAM 的这些测试,根本都测不出来时间差


为什么int类型字段在mysql中默认int(11) 无符号默认int(10)?

为什么int类型字段在mysql中默认int(11) 无符号默认int(10)?_zhuocr的博客-CSDN博客_int类型无符号 mysql

所以mysql默认显示的int(11)和 unsign int(10),只是表示存储数值显示后的位数,并不是实际存储的位数。

mysql开发中如何选择合适存储引擎

mysql开发中如何选择合适存储引擎_zhengyangfan的博客-CSDN博客

MySQL有多种存储引擎: 

MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE。 

MySQL支持数个存储引擎作为对不同表的类型的处理器。MySQL存储引擎包括处理事务安全表的引擎和处理非事务安全表的引擎:

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值