免费的png素材网MYSQL常见索引⾯试题及答案
索引的分类
1、唯⼀索引:确保数据唯⼀性
2、⾮唯⼀索引:这些字段可以重复,不要求唯⼀.
3、主键索引:是唯⼀索引的特定类型,创建主键时⾃动创建.
linuxfind指令4、聚簇索引: 表中记录的物理顺与键值顺序相同,表数据和主键⼀起存储.
php+mysql动态网页设计5、⾮聚簇索引: 表数据和索引分两部分存储
主键和唯⼀索引的区别?
1、主键⼀定会创建⼀个唯⼀索引,但是有唯⼀索引的列不⼀定是主键;
2、主键不允许为空值,唯⼀索引列允许空值;
3、⼀个表只能有⼀个主键,但是可以有多个唯⼀索引;
4、主键可以被其他表引⽤为外键,唯⼀索引列不可以;
5、主键是⼀种约束,⽽唯⼀索引是⼀种索引,是表的冗余数据结构,两者有本质的差别
都在哪些字段加索引?
1、表的主键、外键必须有索引
2、数据量超过300的表应该有索引
3、经常与其他表进⾏连接的表,在连接字段上应该建⽴索引
4、经常出现在Where⼦句中的字段,特别是⼤表的字段,应该建⽴索引
5、索引应该建在选择性⾼的字段上
怎么使⽤索引才能提⾼索引的命中?
1、如果条件中有or,即使其中有条件带索引也不会使⽤(这也是为什么尽量少⽤or的原因)
注意:要想使⽤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,以及磁盘的存储结构?
B±Tree定义
其定义基本与B-Tree相同
除了:
文字边框设计1、⾮叶⼦节点的⼦树指针与关键字个数相同。
2、⾮叶⼦节点的⼦树指针p[i],指向关键字值(K[i],K[i+1])的⼦树。mysql面试题sql
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的读请求继续路由到从库。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论