mysql 字段类型优化_Mysql调优-1数据类型的优化

一、mysql的3层结构

571887aaa98574ca79c626f0ecb8937b.png

大部分操作是分析器和优化器里面执行的;

二、mysql操作:

1.查看mysql的版本号

0f2521fc5a6e0cc4df2de71b67eb8aa4.png

2.mysql -uroot -p->输入密码

3.执行某条sql命令,执行后再执行show profiles;、

show profile;(最近一条)

show profile for query 2;(query_id);

show profile all;

三、

查看mysql端口号:

登录mysql,执行sql语句:  show global variables like 'port';

mysql仅允许本机访问修改解决方案:

创建数据库temp和表tmp1以及tmp2;tmp1中的id使用的是int(4),int存储4个字节;tmp2中的id使用的是smallint(4),smallint存储2个字节;

18430c2358373e40626eaa3be7023d5e.png

程序代码:

public static void main(String[] args){

try {

Class.forName("com.mysql.jdbc.Driver");

Connection conn = DriverManager.getConnection("jdbc:mysql://ip:port/temp","user","pwd");

PreparedStatement ps = conn.prepareStatement("insert into tmp2 values(?,?)");

for(int i=0;i<=2605;i++){

ps.setInt(1,i);

ps.setString(2 ,i+"");

ps.addBatch();

}

ps.executeBatch();

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();

}

}

存储引擎为innodb:

tmp1.frm: 当前存储的表结构文件

tmp1.ibd:当前存储的数据文件

存储引擎为myISAM:

.frm:当前存储的表结构文件

.MYD:当前存储的数据文件

.MYI:当前存储的索引文件

int存储字节为4字节;smallint存储字节为2字节

每个表中都存放了2606个数据;

37ea38564a1ec1e456fe6d76c1b02bae.png

921c8a77c0cce50ddef2113966729297.png

查询表tmp1和表tmp2中id=99的记录并比对查询时间:

f8721d9b64e4a1d7a82c543aa473bba3.png

9b74c3d5452f2744cc9dcb7a542f27ff.png

49785cc57a309b9466e1724ed2d45c39.png

c259fc41dd38ff6d16d360eb735fc4b0.png

不同的数据格式,查询时间是不一致的,应该使用对应的类型来查询;例如时间就使用Date类型;

四、mysql的数据类型

show profile : https://www.cnblogs.com/developer_chan/p/9231761.html

mysql中提供转ip的函数 INET_NTOA('255.255.255.255')对应ip的最大值,变成整型;

INET_NTOA('')

数据库存储的话是整型还是字符串?整型存储的空间占用少;

尽量使用满足需求的最小数据类型;

1.字符串:

一般使用char和varchar类型就可以了;

varchar(5)与varchar(255)保存同样的内容,硬盘存储空间相同,但内存空间占用不同,是指定的大小。

解释:

大小和占用空间大小不同-磁盘预读

int(M) M表示的不是数据的最大长度,只是数据宽度,并不影响存储多少位长度的数据;

varchar(M) M表示的是varchar类型数据在数据库中存储的最大长度,超过则不存

一般对于BLOB和TEXT:存储太大的字符串的时候,存放在文件中,然后文件地址保存到数据库中;

2.时间:

时间类型的选择关系到精度

datetime/timestamp/date

timestamp和date涉及到时区;

3.枚举:

例如性别,存储0,1之后转换为男女,转换的工作可以在mysql中完成;

create table enum_test(sex enum('male','female','uncertain') default 'uncertain');

insert into enum_test(sex) values('female');

create table enum_test(sex enum('male','female','uncertain') default 'uncertain');

insert into enum_test(sex) values('female');

insert into enum_test(sex) values('male');

insert into enum_test(sex) values('uncertain');

d59fb124bdb8dccdf317cc33223d966c.png

6daadae3b86b5def6f196e3ac0ad2c0a.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值