• 数据库的优化


    一、搜索引擎的选择

      为不同的业务表选择不同的存储引擎,例如:查询插入操作多的业务表,用 MyISAM。临时数据用
    Memeroy。常规的并发大更新多的表用 InnoDB。

    二、分区或者分表

    交易历史表:在年底为下一年度建立 12 个分区,每个月一个分区。
    渠道交易表:分成当日表;当月表;历史表,历史表再做分区。

    三、字符类型

    变长情况下,varchar 更节省空间,但是对于段字段,需要一个字节来记录长度比如固定长度的用 char,不要用 varchar

    四、非空

    非空字段尽量定义成 NOT NULL,提供默认值
    NULL 类型的存储、优化、使用都会存在问题

    五、不要用外键、触发器、视图

    降低了可读性,影响数据库性能,应该把把计算的事情交给程序,数据库专心做存储数据的完整性应该在程序中检查

    六、不要用数据库存储图片(比如 base64 编码)或者大文件

    把文件放在 NAS 上,数据库只需要存储 URI(相对路径),在应用中配置 NAS 服务器地址

    七、表拆分:将不常用的字段拆分出去,避免列数过多和数据量过大。

    比如重账控制表的 clob 报文,可以建立一张表专门用来存储报文。

    八、表冗余:避免关联查询

    主从复制===读写分离:

      基于主从复制实现读写分离,所有的读请求都走从库,所有的写请求都走主库。这样可以减少单台服务器的并发压力。主从复制是怎么实现的呢?在第一节课我们说过,基于 binlog,从服务器会获取主服务器的 binlog 文件,然后解析里面的 SQL 语句,在从服务器上面执行一遍,保持数据一致。
      读写分离可以一定程度低减轻数据库服务器的访问压力,但是需要注意主从数据一致性的问题。当单台机器或者单表存储的数据过大的时候,单表的查询性能还是会下降,我们要进一步对单台机器的数据分型拆分,这个就是分库分表。

    分库分表===垂直---水平

      垂直分库:减少并发压力。水平分表,解决存储瓶颈。垂直分库的做法,把一个数据库按照业务拆分成不同的数据库:

         水平分库:水平分库分表的做法,把单张表的数据按照一定的规则分布到多个数据库。分库分表以后的多数据源的问题,也可以通过中间件解决

     

    哪些情况或字段适合加索引

    1.在经常需要搜索的列上,可以加快索引的速度
    2.主键列上可以确保列的唯一性
    3.在表与表的而连接条件上加上索引,可以加快连接查询的速度
    4.在经常需要排序(order by),分组(group by)和的 distinct 列上加索引 可以加快排序查询的时间,

    哪些情况不适合创建索引
     
    1.查询中很少使用到的列 不应该创建索,如果建立了索引然而还会降低 mysql 的性能和增大了空间需求.
    2.很少数据的列也不应该建立索引,比如 一个性别字段 0或者1,在查询中,结果集的数据占了表中数据行的比例比较,mysql 需要扫描的行数很多,增加索引,并不能提高效率
    3.定义为 text image bit 数据类型的列不应该增加索引,
    4.当表的修改(UPDATE,INSERT,DELETE)操作远远大于检索(SELECT)操作时不应该创建索引,这两个操作是互斥的关系。

    哪些情况会造成索引失效

    1.如果条件中有 or,即使其中有条件带索引也不会使用(这也是为什么尽量少用 or 的原因)
    2.索引字段的值不能有 null 值,有 null 值会使该列索引失效
    3.对于多列索引,不是使用的第一部分,则不会使用索引(最左原则)
    4.like 查询以%开头
    5.如果列类型是字符串,那一定要在条件中将数据使用单引号引用起来,否则不使用索引
    6.在索引的列上使用表达式或者函数会使索引失效
    例如: select * from users where YEAR(adddate) < 2007,将在每个行上进行运算,这将导致索引失效而进
    行全表扫描,因此我们可以改成: select * from users where adddate < ’2007-01-01

     
     
  • 相关阅读:
    springboot2.0整合es的异常总结
    redis的主从模式搭建及注意事项
    一个可配置的爬虫采集系统的方案实现
    初识 go 语言:方法,接口及并发
    初识 go 语言:数据类型
    Science论文"Clustering by fast search and find of density peaks"学习笔记
    OpenCV和Matplotlib色彩空间模式不一致的问题
    Using OpenCV Java with Eclipse
    KMeans聚类算法Hadoop实现
    Ubuntu环境变量——添加与删除
  • 原文地址:https://www.cnblogs.com/guanyuehao0107/p/11975750.html
Copyright © 2020-2023  润新知