zoukankan      html  css  js  c++  java
  • 面试:聊聊sql优化(1)

    数据库优化方案:

    1.  优化sql语句;

        原则: 1.1 尽量根据主键查询;

            1.2 尽量使用单表查询,不要使用关联查询;

            1.3 查询时可以使用in,但是绝对不要使用not in;

    2.  创建索引;CREATE INDEX  索引名字  ON  表名称 (列名称);[列名称:规定你需要索引的列]。

    3.  添加缓存;

        例如:mybatis的一、二级缓存;该操作效率低;

           redis缓存  /  memercache缓存(String);有效的缓解数据库的压力;

    4.  使用数据库的读写分离;

    5.  定期将历时数据进行转储;

    6.  进行分库分表操作(最后的操作);数据库服务器数量和运维都需要花费很多时间和精力;

    mysql优化我一般遵从五个原则:

    1. 减少数据访问: 设置合理的字段类型,启用压缩,通过索引访问等减少磁盘IO
    2. 返回更少的数据: 只返回需要的字段和数据分页处理 减少磁盘io及网络io
    3. 减少交互次数: 批量DML操作,函数存储等减少数据连接次数
    4. 减少服务器CPU开销: 尽量减少数据库排序操作,和全表查询 减少cpu 内存占用
    5. 利用更多资源: 使用表分区,可以增加并行操作,更大限度利用cpu资源

    sql语句常见的优化比如

    1. sql优化第一最基本的为了最快的速度查询到数据,减少消耗,尽量避免全表查询,首先考虑在where和order by字段上建立索引
    1. where子句条件 后不要使用!=和》《操作符,否则数据库会放弃索引使用全表查询
    1. 用like模糊查询时不建议在查询字段开头或首尾两端使用百分号,这也会导致字段放弃索引,全表查询,可以考虑百分号在查询字段后面或者使用全文索引
    1. 在sql中直接使用计算表达式和函数,也会导致索引失败,可以在等号右边计算
    1. 不要写select * from 需要什么字段返回什么字段减少消耗
    1. 在sql语句中嵌套SQL查询 ,不要使用iN 或者 not in 可以使用 exists替代
    1. 对于复杂的查询,可以使用中间临时表 暂存数据
    1. 查询数据量大的表 会造成查询缓慢。主要的原因是扫描行数过多。这个时候可以通过程序,分段分页进行查询,循环遍历,将结果合并处理进行展示。
    • 要查询100000到100050的数据
      SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY ID ASC) AS rowid,* FROM infoTab)t WHERE t.rowid > 100000 AND t.rowid <= 100050
    1. 对数据量较大的表,使用分区分表存储
    1. 一定要定期维护数据表和优化索引,删除空余数据
    1. 尽量使用数字型字段
      尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会 逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。

    面试题

    你们有没有做 MySQL 读写分离?如何实现 MySQL 的读写分离?MySQL 主从复制原理的是啥?如何解决 MySQL 主从同步的延时问题?

    1. 如何实现 MySQL 的读写分离?
      其实很简单,就是基于主从复制架构,简单来说,就搞一个主库,挂多个从库,然后我们就单单只是写主库,然后主库会自动把数据给同步到从库上去。
    2. MySQL 主从复制原理的是啥?
      主库将变更写入 binlog 日志,然后从库连接到主库之后,从库有一个 IO 线程,将主库的 binlog 日志拷贝到自己本地,写入一个 relay 中继日志中。接着从库中有一个 SQL 线程会从中继日志读取 binlog,然后执行 binlog 日志中的内容,也就是在自己本地再次执行一遍 SQL,这样就可以保证自己跟主库的数据是一样的。


  • 相关阅读:
    HDU 5938 Four Operations 【贪心】(2016年中国大学生程序设计竞赛(杭州))
    HDU 5935 Car 【模拟】 (2016年中国大学生程序设计竞赛(杭州))
    HDU 5934 Bomb 【图论缩点】(2016年中国大学生程序设计竞赛(杭州))
    HDU 5933 ArcSoft's Office Rearrangement 【模拟】(2016年中国大学生程序设计竞赛(杭州))
    HDU 5929 Basic Data Structure 【模拟】 (2016CCPC东北地区大学生程序设计竞赛)
    【转】LaTeX 符号命令大全
    HDU 5922 Minimum’s Revenge 【模拟】 (2016CCPC东北地区大学生程序设计竞赛)
    HDU 5927 Auxiliary Set 【DFS+树】(2016CCPC东北地区大学生程序设计竞赛)
    数据结构之稀疏矩阵
    C++中引用(&)的用法和应用实例
  • 原文地址:https://www.cnblogs.com/fan-1994716/p/11740385.html
Copyright © 2011-2022 走看看