北京白癜风多少钱 https://jbk.39.net/yiyuanfengcai/tsyl_bjzkbdfyy/MySQLMySQL有哪些数据库引擎及其区别InnoDB、MyISAM、Archive、Blackhole、CSV相关链接:MySQL引擎之间的区别和优劣之分MySQL有哪些索引普通索引是最基本的索引,它没有任何限制
CREATEINDEXindex_nameONtable(column)唯一索引与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。
CREATEUNIQUEINDEXindexNameONtable(column)主键索引是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。一般是在建表的时候同时创建主键索引
CREATETABLE`table`(`id`int(11)NOTNULLAUTO_INCREMENT,`title`char()NOTNULL,PRIMARYKEY(`id`));组合索引指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀集合,即支持a
a,b
a,b,c3种组合进行查找。
CREATEINDEXindex_nameONtable(column1,column2,column3)全文索引主要用来查找文本中的关键字,而不是直接与索引中的值相比较。fulltext索引跟其它索引大不相同,它更像是一个搜索引擎,而不是简单的where语句的参数匹配。
CREATEFULLTEXTINDEXindex_nameONtable(column)相关链接:MySQL索引类型InnoDB索引有哪些常见数据结构InnoDB索引常见的数据存储结构有Hash结构,B+树结构。Hash结构优点:
存储时只需要存储对应的哈希值,存储速度很快。
进行检索效率非常高,基本上一次检索就可以找到数据。
缺点:
Hash索引不能进行范围查询。
Hash索引不支持联合索引的最左侧原则。
Hash索引不支持ORDERBY排序。
存在Hash冲突。
B+树结构优点:
Btree索引可以加快数据的查询速度。
Btree索引更适合范围查找。
缺点:
命中的数据占用了表中大部分数据,那么mysql查询优化器会认为全表扫描方式更好。
不是按照最左原则,无法使用索引。
notin和也无法使用索引。
如果查询中有某个列的范围查询,则其右边所有的列都无法使用索引。
相关链接:Mysql索引结构与索引原理及hash索引介绍为什么使用B+树而不使用B树
B+树非叶子节点上是不存储数据的,仅存储键值,而B树节点中不仅存储键值,也会存储数据。如果不存储数据,那么就会存储更多的键值,相应的树的阶数(节点的子节点树)就会更大,树就会更矮更胖,如此一来我们查找数据进行磁盘的IO次数又会再次减少,数据查询的效率也会更快。
因为B+树索引的所有数据均存储在叶子节点,而且数据是按照顺序排列的。那么B+树使得范围查找,排序查找,分组查找以及去重查找变得异常简单。
相关链接:Mysql索引结构与索引原理及hash索引介绍、b树和b+树的区别什么是回表MySQL索引分为两类:聚簇索引和非聚簇索引。一般主键索引就是聚簇索引,索引里会保存这一行记录的所有的数据。而普通索引就是非聚簇索引,只会保存这一行记录的主键值。当查询的字段中存在非索引字段时,就需要依靠普通索引查询出来的主键值,再去查询一次才能获取这一行记录的其他数据,即需要扫描两次索引表,这个操作就叫做回表。想要避免回表操作可以使用索引覆盖。相关链接:MySQL的覆盖索引与回表MySQL有哪些架构模式MHA(MasterHighAvailability)优点:
可以支持基于GTID的复制模式
MHA在进行故障转移时更不易产生数据丢失
同一个监控节点可以监控多个集群
缺点:
需要编写脚本或利用第三方工具来实现Vip的配置
MHA启动后只会对主数据库进行监控
需要基于SSH免认证配置,存在一定的安全隐患
MMM(Master-MasterreplicationmanagerforMySQL)优点:
使用Perl脚本语言开发及完全开源
提供了读写VIP(虚拟IP),使服务器角色的变更对前端应用透明
MMM提供了从服务器的延迟监控
MMM提供了主数据库故障转移后从服务器对新主的重新同步功能
很容易对发生故障的主数据库重新上线
缺点:
发布时间比较早不支持MySQL新的复制功能(基于GTID的复制)
没有读负载均衡的功能
在进行主从切换时,容易造成数据丢失
MMM监控服务存在单点故障
相关链接:MySQL高可用集群方案如何优化SQL性能这个问题几乎是可以写出来一本书了,这里只说一些简单的优化方法。
在表中建立索引,优先考虑where、groupby使用到的字段。
尽量避免使用select*,返回无用的字段会降低查询效率。
尽量避免使用in和notin,会导致数据库引擎放弃索引进行全表扫描。
尽量避免使用or,会导致数据库引擎放弃索引进行全表扫描。
尽量避免进行null值的判断,会导致数据库引擎放弃索引进行全表扫描。
尽量避免在where条件中等号的左侧进行表达式、函数操作,会导致数据库引擎放弃索引进行全表扫描。
当数据量大时,避免使用where1=1的条件。通常为了方便拼装查询条件,我们会默认使用该条件,数据库引擎会放弃索引进行全表扫描。
更进一步可以使用Redis进行数据的缓存。
数据量过大的话还可以考虑分区分表。
相关链接:SQL优化(面试题)MySQL事务的四大特性以及四种隔离级别四大特性ACID
原子性(Atomicity):即不可分割,事务要么全部被执行,要么全部不执行。
一致性(Consistency):事务的执行使得数据库从一种正确状态转换成另外一种正确状态。
隔离性(Isolation):在事务正确提交之前,不允许把事务对该数据的改变提供给任何其他事务,即在事务正确提交之前,它可能的结果不应该显示给其他事务。
持久性(Durability):事务正确提交之后,其结果将永远保存在数据库之中,即使在事务提交之后有了其他故障,事务的处理结果也会得到保存。
四种隔离级别MySQL默认的事务隔离级别为repeatable-read。
读未提交(read-un