一.MySQL数据库中的字段类型varchar和char的主要区别是什么?
char和varchar最大的不同就是一个是固定长度,一个是可变长度.由于是可变长度,因此存储的是实际字符串再加上一个记录字符串长度的字节。如果分配给char或varchar列的值超过 列的最大长度,则对值进行裁剪.
varchar(M)和char(M),M都表示字符数.varchar的最大长度为65535个字节,不同的编码所对应的最大可存储的字符数不同.char最多可以存放255个字符,不同的编码最大可用字节数不同
二.优化mysql数据库的方法
1,数据表中的数据类型的优化 如选择合适的字段,选择效率快速的字段
2,索引优化
3、SQL语句的优化
(1)优化查询过程中的数据访问如使用limit、使用返回列不用*
(2)优化长难句的查询语句 变复杂为简单、切分查询、分解关联查询
(3)优化特定类型的查询语句如优化count()、优化关联查询、优化子查询、优化Group by、优化li'mit
4、存储引擎的优化
(1)尽量使用InnoDB存储引擎,因为它支持事务、外键、使用独立表空间、使用的是行级锁、
5、数据表结构的设计优化
(1)分区操作 如通过特定的策略对数据进行物理拆分、对用户透明的、partition by
(2)分库分表 如水平拆分(以行级进行拆分)、垂直拆分(列及拆分)
6、数据架构的优化
(1)主从复制(2)读写分离(3)双主热备(4)负载均衡 通过LVS的三种模式实现的、Mycat数据库中间件实现的
三.myisam和innodb的区别
innodb:具有事务,支持4个事务隔离级别,回滚,崩溃修复能力和多版本并发的事务安全,包括ACID,大量的insert和update适用;支持表锁;读写阻塞与事务隔离级别相关
myisam:没有事务,它提供高速存储和检索,以及全文搜索能力,大量的select适用;支持行锁;读写互相阻塞
场景选择:
MyISAM:
不需要事务支持(不支持)
并发相对较低(锁定机制问题)
数据修改相对较少(阻塞问题),以读为主
数据一致性要求不是非常高
尽量索引(缓存机制)
调整读写优先级,根据实际需求确保重要操作更优先
启用延迟插入改善大批量写入性能
尽量顺序操作让insert数据都写入到尾部,减少阻塞
分解大的操作,降低单个操作的阻塞时间
降低并发数,某些高并发场景通过应用来进行排队机制
对于相对静态的数据,充分利用Query Cache可以极大的提高访问效率
MyISAM的Count只有在全表扫描的时候特别高效,带有其他条件的count都需要进行实际的数据访问
InnoDB:
需要事务支持(具有较好的事务特性)
行级锁定对高并发有很好的适应能力,但需要确保查询是通过索引完成
数据更新较为频繁的场景
数据一致性要求较高
硬件设备内存较大,可以利用InnoDB较好的缓存能力来提高内存利用率,尽可能减少磁盘 IO
主键尽可能小,避免给Secondary index带来过大的空间负担
避免全表扫描,因为会使用表锁
尽可能缓存所有的索引和数据,提高响应速度
在大批量小插入的时候,尽量自己控制事务而不要使用autocommit自动提交
合理设置innodb_flush_log_at_trx_commit参数值,不要过度追求安全性
避免主键更新,因为这会带来大量的数据移动