如何优化数据库

数据库优化
Mysql优化?如何优化一条慢SQL语句?

会引发的慢查询,大体有三种可能
1.索引没有设计好
2.SQL语句没写好
3.MySQL优化器选错了索引
在索引的选择上,可以使用覆盖索引来减少回表,索引建的过多,会占用空间,所以可以使用联合索引,减少索引的创建,在对一些字符串字段建立索引时,为了节约空间以及减少分页,可以创建前缀索引。导致查询慢,还可能是语句没写好,在使用order by时,尽量避免全字段排序,索引的字段不要使用函数操作,会全表检索,使用模糊查询时,尽量不要加第一个%,这也会全表检索,尽量不使用not in 和不等于操作等。优化器有时候也会选错索引,必要的时候可以force index来指定索引。平常工作中也要经常经常使用explain来观察语句的执行过程。

存储记录的数据结构==索引数据结构?为什么不用AVL和红黑树存?

索引的常见数据结构有哈希表、有序数据和搜索树。哈希表做区间查询的速度很慢,适用于等值查询,有序数组做更新操作成本大。mysql的默认存储引擎innoDB索引的数据结构是B+树,它是一种N叉平衡树,非叶子节点不存储实际的数据信息。AVL树和红黑树本质都是二叉平衡树,如果使用二叉树的话,树的深度很大,查询数据的过程中会增大读磁盘的次数。

MySQL有哪些索引类型?索引的实现?

innoDB主要有主键索引、普通索引、唯一索引、联合索引这些种类,索引是为了提高数据的查询效率,在innoDB里它的数据结构是B+树,它是一种N叉平衡树,非叶子节点不存储实际的数据信息。
主键索引是每个表都默认带有的,它的叶子节点存放的是整行数据。普通索引叶子节点是主键的值,所以在使用普通索引时,需要做回表操作。唯一索引,所有的更新操作都要先判断是否违反唯一性原则,不支持使用change buffer(节省随机读磁盘的IO消耗),所以如果业务可以接受,可以优先选择普通索引。联合索引只要满足最左前缀,都可以利用检索来加速检索。

为什么要为InnoDB表设置自增列做主键?

自增列做主键索引,可以提高性能以及减少储存空间。它在做追加操作时,不用挪动其他记录,不会触发叶子节点分页,所以性能好,而且主键长度越小,普通索引的叶子节点占用的内存也越小。所以自增主键也是更合理的选择。

mysql事务隔离级别?脏读幻读不可重复读?

innoDB是支持事务的,当数据库上多个事务同时执行的时候,就可能出现脏读、不可重复读、幻读的问题。脏读:事务A读到了事务B未提交的数据。不可重复读:事务A第一次查询得到一行记录row1,事务B提交修改后,事务A第二次查询得到row1,但列内容发生了变化,两次读的内容不一致。幻读:事务A第一次查询得到一行记录row1,事务B提交修改后,事务A第二次查询得到两行记录row1和row2,就产生了幻读。事务的隔离级别有读未提交,读提交,可重复读,串行化(加锁),读未提交就是可以读到事务还没提交更改的值,读提交,事务只有提交之后它的变更才会被看到,可重复读,一个事务未提交前,他看到的值都是一致的,串行化就是读加读锁,写加写锁。innoDB的默认隔离级别是可重复读,可重复读隔离级别会造成幻读,所以就引入了间隙锁。

什么是死锁?锁等待?如何优化这类问题?通过数据库哪些表可以监控?

不同线程出现了循环资源依赖,涉及的线程都在等待别的线程释放资源,就会导致几个线程进入无限等待的状态,称为死锁。解决死锁有两种方式,第一种是设置超时等待时间,等待超过这个时间,就自动退出。第二种是主动死锁检测,发现死锁后,就回滚某一事务,让另一事务得以继续执行。但是死锁检测会耗费CPU资源,所以对于热点行更新导致的锁冲突问题可以控制并发度或者把一行改成多行求和等方式解决。可以通过innodb_row_lock的状态变量来分析行锁的争用情况,如果存在锁竞争的话,也可以设置innodb monitors来进一步观察发生锁争用的表、数据行等。

你之前处理过MySQL的哪些案例?

1.查询较慢的统计信息,单独放在一张表里,做定时任务,晚上查出来。
2.id=1,id的数据类型是varchar,造成索引失效,全表扫描。

服务器负载过高或者网页打开缓慢,简单说说你的优化思路?

数据库方面:
服务器负载过高,增加从库,读写分离
网页打开缓慢,增加索引,优化sql语句,如果结果不具有实时性,可以另加一张结果表
其他方面:
负载均衡?
Redis 与数据库数据同步

MySQL主从复制的具体原理是什么?

https://www.cnblogs.com/Aiapple/p/5792939.html

一个表特别大怎么办:大表分小表,怎么实现:使用分区表 ?

https://www.cnblogs.com/yycc/p/7518240.html

redis用了哪些?redis能做哪些(应用场景)? 聊Redis用了哪些数据结构?

5种:string、哈希、set、list、有序set
https://www.cnblogs.com/xiaoxi/p/7007695.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值