1. MySQL中字段联合索引怎么使用才能生效。
1)联合索引又叫复合索引。对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部分,但只能是最左侧部分,例如索引是key index(a,b,c).可以支持a|a,b|a,b,c 3种组合进行查找,但不支持b,c进行查找,当最左侧字段是常量引用时,索引就十分有效
2)复合索引的结构与电话簿类似,人名由姓和名构成,电话簿首先按姓氏对进行排序,然后按名字对有相同姓氏的人进行排序。如果您知 道姓,电话簿将非常有用;如果您知道姓和名,电话簿则更为有用,但如果您只知道名不姓,电话簿将没有用处。
3)所以说创建复合索引时,应该仔细考虑列的顺序。对索引中的所有列执行搜索或仅对前几列执行搜索时,复合索引非常有用;仅对后面的任意列执行搜索时,复合索引则没有用处
2.事务是如何通过日志实现的,说的越深入越好
1)一般情况下,mysql在崩溃之后,重启服务,innodb通过回滚日志undo将所有已完成并写入磁盘的未完成事务进行rollback,然后redo中的事务全部重新执行一遍即可恢复数据,但是随着redo的量增加,每次从redo的第一条开始恢复就会浪费长的时间,所以引入了checkpoint机制。
2)Redo记录的是已经全部完成的事务,就是执行了commit的事务,记录文件是ib_logfile0 ib_logfile1。
Undo记录的是已部分完成并且写入硬盘的未完成的事务,默认情况下回滚日志是记录下表空间中的(共享表空间或者独享表空间)
3.请问如何优化MySQL性能的方法
1.选择合适的存储引擎: InnoDB myisam
2.保证从内存中读取数据,讲数据保存在内存中 nosql 静态化
3.提高磁盘读写速度 硬件升级
4.充分使用索引 索引的类型
5.分析文件 和 慢查询日志
6. 使用 MYSQL 内存
7.单条查询最后增加 LIMIT 1,停止全表扫描。索引
8.Select * from table where
9.将非”索引”数据分离,比如将大篇文章分离存储,不影响其他自动查询。
10.不用 MYSQL 内置的函数,因为内置函数不会建立查询缓存。
11.使用 IP 而不是域名做数据库路径,避免 DNS 解析问题
4.MYSQL数据库中的字段类型varchar 和 char 的主要区别是什么?那种字段的查找效率要高,为什么?
1)Varchar和char的最主要区别为varchar的存储空间是不固定的,而char是固定的,varchar(10) 代表存储最大字节为10而char(10)则代表存储字节为10即便没存够10其余也会用空格填满。
2)Char的效率更高,因为varchar查找之前需要用1-2个字节来判断字节长度为多少,而char因为长度固定所以并不需要,而varchar查询数据的时候需要trim数据,char类型trim数据是可以根据需求选择的所以char效率高于varchar.
3)单位是:字符。php5.4之前是字节,php5.4之后是字符
5.描述MYSQL 的MYISAM和InnoDB 存储引擎的主要区别和应用场景
Myisam读取数据快,不支持外键,不支持事务,支持表锁,每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型.frm文件存储表定义。数据文件的扩展名为.MYD (MYData)。索引文件的扩展名是.MYI (MYIndex),应用于大批数据查询;
innoDB 支持事务,支持行锁,innodb不保存表的具体行数,InnoDB:基于磁盘的资源是InnoDB表空间数据文件和它的日志文件,InnoDB 表的大小只受限于操作系统文件的大小,一般为 2GB,应用于需要数据增删改,数据恢复,事务的表中
6.MySQL分表的依据是啥?
什么样的表需要拆分:根据表的体积、表的行数、访问特点来衡量表是否需要拆分
一.拆分标准是:
1.表的体积大于2G或行数大于1000w,以单表主键等简单形式访问数据,这个时候需要分表
2.表的体积大于2G或行数大于500W,以两表jion,小范围查询(结果集小100行)等形式访问数据,这个时候需要分表
3.表的体积大于2G或行数大于200w,以多表join,范围查询,order by,group by,高频率等复杂形式访问数据,尤其DML,这个时候需要分表
4.表的字段中含有text等大字段的、varchar(500)以上的、很少使用的字符型字段拆分成父子表,这种分表可以和以上联合使用
5.数据有时间过期特性的,需要做数据分表归档处理
只要达到上面任何一个标准,都需要做分表处理
7.Mysql主从同步的作用:
1)数据分布 2)负载平衡 3)备份 4)高可用性和容错
8.配置mysql主从后,如何保证读数据在从服务器读,写入写到主服务器上?
应用程序指定主从的IP地址就可以了