zoukankan      html  css  js  c++  java
  • 面试知识点总结之数据库Mysql的优化

    五个方面:

    1. 根据服务层面:配置mysql性能优化参数

    2. 从系统层面增强mysql的性能:优化数据库表结构①将字段较多的表分解成多个表(如订单表和订单详情表) ②增加中间表(ma_dictionaries字典表)

    3. 从数据库层面增强性能:优化sql语句,合理使用索引

    4. 从应用层面增强性能:使用缓存和Nosql数据库方式存储,如MongoDB/Memcached/Redis来缓解高并发下数据查询的压力

    5. 提升数据库服务器硬件配置,或者搭建数据库集群

    B-tree索引是常用的索引,其存储结构类似书的索引结构,有分支和叶两种类型的存储数据块,分支块相当于书的大目录,叶块相当于索引到的具体的书页。一般索引及唯一约束索引都是使用B树索引

    索引类型:

    唯一索引

    主键索引

    聚集索引:表数据按照索引的顺序来存储的,对于聚集索引,叶子节点即存储了真实的数据行,不再有另外单独的数据页,每个表只能一个

    非聚集索引:表数据存储顺序无关,对于非聚集索引,数据存储在一个位置,索引存储在另一个位置,索引种包含指向数据存储位置的指针

    create[unique] [clustered] [nonclustered] index 索引名称 on 表名(列名);  drop index 表名.索引名

    创建索引的情况:

    1. 经常需要搜索的列上

    2. 作为主键的列上

    3. 经常用在连接的列上(如外键加快连接速度);在经常需要根据范围进行搜索的列上,因为索引已经排序,其指定的范围是连续的

    4. 经常需要排序的列上,因为索引已经排序,可以利用索引的顺序,加快排序查询时间

    5. 经常使用在where字句种的列上,加快条件的判断速度

    不创建索引的情况:

    1. 查询很少使用或参考的列

    2. 很少的数据值的列

    3. 哪些定义为text,image和bit数据类型的列不应该加,要么因为列的数据量大,要么取值少,不利于使用索引

    4. 当修改性能远远大于检索性能时,互相矛盾关系,加索引提高检索性能,会降低修改性能(因为更新表会更新索引)

    索引失效的情况:

    1. 前导模糊查询不能利用索引(like '%XX ')

    2. 如果是组合索引,不按索引顺序查找,则会全表扫描

    3. 条件中有 or,

    4. 索引无法存储null值,所以where条件有null值判断

    5. 应尽量避免在where子句中使用 != <> 操作符,否则...

    6. in和not in 慎用,否则... 对于连续的数值,能用between就不用in

    7. 应尽量避免在where字句中对应字段进行函数操作,否则...

    8. 应尽量避免在where字句中对字段进行表达式操作,否则....如where num/2 = 100  num = 100*2

    数据库优化之分表

      分表分为水(按行)分表和垂直(按列)分表

      根据经验,mysql表数据一般达到百万级别,查询效率会很低,容易造成锁表,甚至堆积很多连接,直接挂掉。水平分表能很大程度减少这些压力。按行数据进行分表

    水平分表策略:1. 按时间分表 2. 按区间范围分表 3. hash分表

    数据库优化之读写分离:一台数据库支持的最大并发连接数是优先的,如果用户并发访问太多。一台服务器满足不了要求可以集群处理。mysql的集群处理技术最常用的就是读写分离

      主从同步:数据库最终会把数据持久化到磁盘,如果季军必须确保每个数据库服务器的数据是一致的,能改变数据库数据库的操作都往主数据库去些,而其他的数据库从主数据库上同步数据。

      读写分离:使用负载均衡来实现写的操作都往主数据去,而读的操作往从服务器上去

    数据库优化之缓存:在持久层(dao)和数据库(db)之间添加一个缓存层,如果用户访问的数据已经缓存起来时,在用户访问时直接从缓存中获取,不用访问数据库。而缓存是在操作内存及,访问速度快。

    作用:减少数据库服务器压力,减少访问时间。常用的缓存有redis(memcache等)作为中央缓存,对缓存数据进行集中处理。

  • 相关阅读:
    Modernizr使用指南(转)
    使用Func<>和Action简化委托
    实现类似MVC ViewBag类型的对象
    更改服务器的SID 加入域控制器提示SID重复
    SQL SERVER 执行大于80M的SQL 脚本
    完全关闭IIS日志,包括System32下的LogFile
    MVC不用302跳转Action,内部跳转
    SHA1l加密
    获取当前时间戳
    invoke反射
  • 原文地址:https://www.cnblogs.com/cgy-home/p/14526393.html
Copyright © 2011-2022 走看看