数据类型

int:

select pow(2,31) - 1 有符号最大值

select pow(2,32)  无符号,最大值

select pow(2,31)  负数最大值

int 无符号最大42亿 也就够用来 做主键了。(每天写入不超过100万就没事)

每天写100万,能写10年。

DB:table(字段,索引),存储过程,触发器,事件,视图(表就是视图)

decimal  会转成浮点数进行运算,会出现四舍五入情况。(可以考虑存成int 单位为分)

前面整个字节长度,后面是 小数点占用的位数。

decimal(10,0)占用10个字节==int(10)占用4个字节,不要犯这种错。

bit bit(M) #m用于表示,有多少个二进制位(0101),M可以支持0-64位,varbinary可以存储更多(select 不到,程序可读)。

int(4) 不是允许存4位,只是显示宽度。

int(4) zerofill 写入数字5,显示:0005

int(11) auto_increment 每次自增加1

datetime  占用4个字节(推荐使用,5.6及以后可以更新当前时间)

日期转换:select cast('2017-04-10 14:38:14.0697' as date);,select now()+0

5.6新增两个函数可以打印出毫秒:

select now(4),select microsecond(now(4)); 

char(10),存储1个字符自动补全到10个字符

varchar(10),存储1个字符就占一个字符,低于255字节需要1个字节记录格式信息overhead,大于255字节需要2个字节,。varchar最多存储65535字节

innodb_file_format #antelope格式可存储255字节,之后在overflow,barracuda超过20个字节,存储到其他page上,设计时把字符列放到最后。因为最小的列在一个page上,更好读出来。

myisam 索引长度最高1000,innodb索引长度最高767

longblob(binary)没有字符集校验,longtext有字符集校验。

varchar,utf8字符集。最多存储(65535-2)/8

图片存储到binary&blob 等二进制字段里面,(图片存储可以调用mongo的DFS,百度云,360云盘)

文件格式b开头,varchar 占用20个字节。

索引列不要使用更新频繁的列。where 条件索引选择度,每个字段加上not null。

超过30%可能不走索引。选择度30%以下可以建立索引,控制在10%最好。查询超过30%一般不建索引。

多列索引(a,b,c)相当于(a),(ab),(abc)

 两表做join,字符类型或字符集不一样,面临类型转换,索引失效。

select * from tb where i_c1 = and v_c2 (两个列都是索引,优化器使用哪个?)实际上选哪个都不对。SQL:成本优化,RBO:基于规则 rule base opt(谁在前使用谁)。CBO:基于代价 cost base opt。

新版本有index merge,早期也有比较坑。。5.6和5.7好多都在使用RBO,没有直方图。

原文地址:https://www.cnblogs.com/xxmysql/p/6477344.html