了解数据库调优

  • 索引
  • 索引的目的
  1. 快速访问数据信息 (索引文件提高检索速度)
  2. 创建唯一性索引,保证数据库表中每一行数据的唯一性
  3. 加速表和表之间的连接
  4. 使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间
  • 索引对数据库系统的负面影响
  1. 创建索引和维护索引需要耗费时间,这个时间随着数据量的增加而增加
  2. 索引需要占用物理空间,不光是表需要占用数据空间,每个索引也需要占用物理空间
  3. 当对表进行增、删、改、的时候索引也要动态维护,这样就降低了数据的维护速度
  • 建立索引的原则
  1. 在最频繁使用的、用以缩小查询范围的字段上建立索引
  2. 在频繁使用的、需要排序的字段上建立索引
  3. InnoDB建议使用默认自增的int型主键作为主索引
  • 不宜建立索引
  1. 对于查询中很少涉及的列或者重复值比较多的列
  2. 对于一些特殊的数据类型,不宜建立索引,比如文本字段(text)等
  • 设置了索引无法使用
  1. 以“%”开头的LIKE语句,模糊匹配
  2. OR语句前后没有同时使用索引
  3. 数据类型出现隐式转化(如varchar不加单引号的话可能会自动转换为int型)
  • 查询
    整理中

  • 其它

  1. MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?

a. 设计良好的数据库结构,允许部分数据冗余,尽量避免join查询,提高效率。
b. 选择合适的表字段数据类型和存储引擎,适当的添加索引。
c. mysql库主从读写分离。
d. 找规律分表,减少单表中的数据量提高查询速度。
e。添加缓存机制,比如memcached,apc等。
f. 不经常改动的页面,生成静态页面。
g. 书写高效率的SQL。比如 SELECT * FROM TABEL 改为 SELECT field_1, field_2, field_3 FROM TABLE.

2.锁的优化策略

  1. 读写分离
  2. 分段加锁
  3. 减少锁持有的时间
  4. 多个线程尽量以相同的顺序去获取资源

不能将锁的粒度过于细化,不然可能会出现线程的加锁和释放次数过多,反而效率不如一次加一把大锁。

  1. 索引的底层实现原理和优化

B+树,经过优化的B+树

主要是在所有的叶子结点中增加了指向下一个叶子节点的指针,因此InnoDB建议为大部分表使用默认自增的int主键作为主索引。

  1. 实践中如何优化MySQL

最好是按照以下顺序优化:

1.SQL语句及索引的优化

  1. 数据库表结构的优化

3.系统配置的优化

4.硬件的优化


  • 优化数据库的方法
  1. 选取最适用的字段属性,尽可能减少定义字段宽度,尽量把字段设置NOTNULL,例如:’省份’、’性别’最好适用ENUM
  2. 使用连接(JOIN)来代替子查询
  3. 适用联合(UNION)来代替手动创建的临时表
  4. 事务处理
  5. 锁定表、优化事务处理
  6. 适用外键,优化锁定表
  7. 建立索引
  8. 优化查询语句
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值