首页 > 编程知识 正文

mysql优化面试题及答案,MySQL 面试题

时间:2023-05-06 08:19:18 阅读:159265 作者:426

索引的分类

1、唯一索引:确保数据的唯一性

2、非唯一索引:这些字段可以重叠,且不必是唯一的。

3、主键索引:是唯一索引的特定类型,在创建主键时自动创建。

4、簇索引:中记录的物理顺序与键值顺序相同,表数据与键一起存储。

5、非簇索引:表的数据和索引分两部分存储

主键和唯一索引的区别?

1、主键必须创建唯一索引,但具有唯一索引的列并不一定是主键;

2、主键不允许空值,唯一索引列允许空值;

3、一个表只能有一个主键,但可以有多个唯一索引;

4、主键可以作为外键从其他表引用,并且不能是唯一的索引列;

5、主键是一种约束,唯一的索引是一种索引,是表的冗馀数据结构,两者有本质区别

都在哪些字段加索引?

1、表的主键、外键必须有索引

2、数据量超过300的表应该有索引

3、经常与其他表连接的表必须在连接字段中建立索引

4、经常出现在Where子句中的字段,特别是大表中的字段,需要编制索引

5、索引必须建在选择性强的场上

怎么使用索引才能提高索引的命中?

1、条件中有or时,即使其中有条件有索引也不使用(所以尽量不使用or ) )。

请注意,要使用3:or并启用索引,必须对or条件中的每一列进行索引

2、对于多列索引,如果不是要使用的第一部分(第一部分),则不使用索引

3、如果列类型为字符串,则必须用引号将数据引起来。 如果不用引号括起来,则不使用索引

4、在估计为mysql使用全表扫描比使用索引快情况下,不使用索引

索引的最左前缀了解吗?

索引index1:(a、b、c ) )包含三个字段,索引是有序的。 索引文件中索引index1索引的排列是有序的。 首先根据a排序,然后根据b排序,最后根据c排序

索引是越多越好吗?为什么?

1 .合理编制索引可以提高数据的读取效率,不合理编制索引会减慢数据库的响应速度。

2、索引越多,数据更新速度越慢。

不要将索引放在选定的字段中。 这是没有意义的。 应该在where、order by等条件下选择的句子中合理配置索引。

例如:

SELECT id、title、content、cat_id FROM article WHERE cat_id=1;

上面的语句在id/title/content上建立索引是没有意义的,此语句没有任何优化。 但是,将索引放在外键cat_id上会产生相当好的效果

索引的底层数据结构知道吗?推荐大家看看B-Tree和Hash,以及磁盘的存储结构?

BTree定义

其定义基本上与B-Tree相同

其他:

1、非叶节点的子树指针和关键字个数相同。

2、非叶节点子树

指针p[i],指向关键字值(K[i],K[i+1])的子树。

3、非叶子节点仅用来做索引,数据都保存在叶子节点中。

4、所有叶子节点均有一个链指针指向下一个叶子节点。

数据库主从同步

1、MySQL半同步复制

MySQL的Replication默认是一个异步复制的过程,从MySQL5.5开始,MySQL以插件的形式支持半同步复制,我先谈下异步复制,这样可以更好的理解半同步复制。

1)异步复制

MySQL默认的复制是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理,这样就会有一个问题,主如果crash掉了,此时主上已经提交的事务可能并没有传到从库上。

2)半同步复制

对于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟,这个延迟最少是一个TCP/IP往返的时间。所以,半同步复制最好在低延时的网络中使用。

2、数据库中间件

流程:

1)所有的读写都走数据库中间件,通常情况下,写请求路由到主库,读请求路由到从库

2)记录所有路由到写库的key,在主从同步时间窗口内(假设是500ms),如果有读请求访问中间件,此时有可能从库还是旧数据,就把这个key上的读请求路由到主库。

3)在主从同步时间过完后,对应key的读请求继续路由到从库。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。