mysql数据类型优化

mysql数据库怎么那么重要,,不就写写sql,那有什么,so easy,我一直是这样以为的,mongodb我可能不会,但sql语言我学了两遍,非常的自信。
可以有一天,公司线上环境mysql报了个莫名奇妙的错误,
1、Can't create more than max_prepared_stmt_count statements (current value: 16382)
运维一查:show status like "%Com_stmt%"


image.png

一共创建了67998次 prepare,执行了42646,关闭了17215,说明有25000多条stmt没有关闭。
而查询数据库上线:show variables like "%stmt%"


image.png

什么!!!,最大16382 ,而我们25000多条stmt没关闭,不报错怎么可能。
解决办法:go里面操作mysql采用原生sql
stmt, _ := db.Prepare(`INSERT INTO user (name, age) VALUES (?, ?)`)
//defer stmt.Close(),关键地方,未关。
ret, err := stmt.Exec("xys", 23)

2、那是去年的事情啦,已经离我们很遥远,可是当我们刚刚放松警惕,又一个天雷滚滚,线上服务又垮掉了。
Too many connections
天哪,这又是个什么错误!!!连接数过多。。

解决办法:1、增大mysql最大连接数,
2、解决慢查询语句占用连接。
show variables like '%connections%'


image.png

好,,问题暂时先抛出这两个。开始进入正题,数据类型优化什么呢?就是在建表时使用什么样的类型。
1、尽量不用null,因为不走索引
2、decimal 比double精度高,耗费性能
数据量大时,可以将decimal 换成bigint
3、整数类型后面跟的是显示的宽度。M指示最大显示宽度。最大有效显示宽度是255。显示宽度与存储大小或类型包含的值的范围无关。
4、对于varchar来说,只分配真正需要的空间,varchar(20) vs varchar(1000),因为Mysql通常会分配固定大小的内存来保存内部值,分配多了不用,是浪费啊

你可能感兴趣的:(mysql数据类型优化)