mysql 常见面试题

执行顺序:

读未提交,读已提交,重复读,串行化

索引:

b树:

b+树:所有数据都存在最下层的叶子节点

非聚集索引查询,会回表,还得再查一次

性能分析:

    1:通过指令查询表哪个sql语句执行的较多

    2:打开慢查询日志:他会记录所以超过2秒的sql语句,默认是10秒,需要自己配置时间,然后可以针对性的对sql语句进行优化  

    3:通过 show profiles 查看每条sql的执行时间,前提得打开这个设置

    4:通过explain 查看sql执行的性能:在sql的前面加上explain 就能看到sql执行的情况

索引失效的情况:

 1):where后面的情况

    1:最左前缀法则:

            联合索引(name,age):如果查询没有 name列,那么这个联合索引不生效,

    单列索引和联合索引:尽量创建联合索引

    2:禁止使用<,>这种范围查询  但是可以用 >=  或者  <=

    3: 禁止使用运算操作

    4:下列的phone就不生效,字符串类型要加''

    5:模糊查询,切记 'AA%' 生效 , '%AA'或者'%AA%'不生效

    6:下图id有索引而or后面的age没有索引,整条不生效

    7:数据库会评估到底用不用索引,

            比如 当表里面所有人的age都在20岁以上 

            select * from age >= 0      那么数据库会判断不用索引,因为这条语句也是扫描全表

2)select后面的情况

    1:不要用select *    , 会出现回表

            因为id下面存的是数据,而name下面存的是id,以第三个语句为例子:去name里面查,查到了id,但是多了个gender字段,所以还得去id里面去查,查了两次,所以查的字段需要建立索引,如果用select *,那么所以字段需要建立联合索引,这样才才能提高效率

索引的建立条件,第一个数据量较大一般是百万条。不要小看数据库的性能

uodate优化:后面的where条件需要是索引列,如果是,执行的时候锁的的行数据,如果不是锁的的整张表,并发的时候效率会大大的降低,切记

锁:

    1:全局锁(锁整个库)

            操作的时候别人对这个库只能读

    2:表锁(锁某一张表)

            1):共享读锁   

                    操作的时候别人可以读不可写

            2):独占写锁

                    操作的时候别人不可读不可写

    3:行锁

总结:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值