zoukankan      html  css  js  c++  java
  • MySQL索引及优化

    一 索引
    1.1.1 在 SQL 数据库一个班级表里只记录了 100 位同学的情况,那么对该表建立索引文件的描述正确的是(不适宜,因为对少数记录的表进行索引实际上会产生不利的影响)
    1.2.1 索引的好处和坏处是什么?   1> 好处.在适合的索引下,查询快.   2> 坏处.索引需要成本去维护.
    1.2.2 数据库中,哪些列需要创建索引,哪些列不适合创建索引?   1> 经常作为where order by group by的列建议创建索引   2> 重复值过多的列不适合做索引   3> 经常会发生变化的列不适合做索引
    1.2.3 Mysql 列出数据库___use__切换当前用户连接的数据库__库名____
    1.2.4 请问以下一些查询语句是否用到该索引? 对 last_name 与 first_name 做索引     以下语句会走last_name部分索引:       SELECT * FROM CUSTOMER_MASTER WHERE last_name = 'Crane' AND first_name LIKE '%Ed';       SELECT * FROM CUSTOMER_MASTER WHERE last_name LIKE 'Crane%' ORDER BY first_name,last_name;     以下语句会走全部索引:       SELECT * FROM CUSTOMER_MASTER WHERE last_name='Crane' OR first_name='ED';
    1.2.5 说说你对索引的认识(结构、对 dml 的影响、为什么提高查询性能)       索引有 B-TREE、BIT、CLUSTER 等类型。ORACLE 使用了一个复杂的自平衡 B-tree 结构;通常来说,在表上建立恰当的索引,查询时会改进查询性能。
        但在进行插入、删除、修改时,同时会进行索引的修改,在性能上有一定的影响。有索引且查询条件能使用索引时,数据库会先度取索引,根据索引内容和查询条件,
        查询出 ROWID,再根据 ROWID 取出需要的数据。由于索引内容通常比全表内容要少很多,因此通过先读索引,能减少 I/O,提高查询性能。     b-tree index/bitmap index/function index/patitional index(local/global)索引通常能提高 select/update/delete的性能,
        会降低 insert 的速度。

    二 MySQL 优化
    2.1 选择    从二叉树的任一结点出发到根的路径上,所经过的结点序列必按其关键字降序排列。( C )     A 二叉排序树   B.大顶堆     C 小顶堆     D.平衡二叉树
    2.2 填空    在总计函数中,传回非 NULL 值的字段数目的函数名称是: ___COUNT()___
    2.3 简答   2.3.1 若果一个 sql 查询语句很长,执行速度慢,你会想到哪些优化的方法?     1> 查询不需要的记录,使用 limit 解决;     2> 多表关联返回全部列,指定 A.id, A.name, B.age;     3> 总是取出全部列,SELECT * 会让优化器无法完成索引覆盖扫描的优化。     4> 优化 count() 查询     5> 优化关联查询     6> 优化子查询(即嵌套查询)     7> 优化 GROUP BY 和 DISTINCT     8> 优化 LIMIT 分页     9> 优化 UNION 查询
      
    2.3.2 数据库里有些数据会反复被查询,问有什么好方法提高效率?     1> 建立索引     2> 分区(如 MySQL,按时间分区)     3> 尽量使用固定长度字段和限制字段长度(如 varchar(10))     4> 增加缓冲区     5> 如果设计表的级联,不同的表存储在不同磁盘上,以增加 I/O 速度     6> 优化 sql 语句,减少比较次数     7> 限制返回条目数(mysql 中使用 limit)
      
    2.3.3 系统中,主要的业务表。按月进行分表。7,8,9 月表分别为 tab_201707、tab_201708、tab_201709 这三个表里。表结构如下:     SQL> desc tab_201707;       Name Type Nullable Default Comments       ID NUMBER 自增       CID NUMBER Y 批次 ID       CODE VARCHER2(20) Y 特服号       CORPORATEID NUMBER 企业 ID       USERID NUMBER Y 用户 ID
        请写出 SQL 语句,统计
    7、8、9 三个月,每个 USERID 的记录总数       select count(id) from tab_201707 group by USERID;       select count(id) from tab_201708 group by USERID;       select count(id) from tab_201709 group by USERID;
      
    2.3.4 什么是跨站脚本攻击,有何危害,sq|注入攻击如何防范?         XSS 跨站脚本攻击:两种情况。一种通过外部输入然后直接在浏览器端触发,即反射型 XSS;还有一种则是先把利用代码保存在数据库或文件中,
          当 web 程序读取利用代码并输出在页面上时触发漏洞,即存储型 XSS。DOM 型 XSS 是一种特殊的反射型 XSS。跨站点脚本(XSS)允许攻击者通过利用因特网
          服务器的漏洞来发送恶意代码到其他用户。攻击者利用跨站点脚本(XSS)攻击向那些看似可信任的链接中注入恶意代码。当用户点击了链接后,内嵌的程序将被提交
          并且会在用户的电脑上执行,这会使黑客获取。       危害:前端页面能做的事它都能做。(不仅仅盗取 cookie、修改页面等)       漏洞防范         (
    1) 特殊字符 HTML 实体转码。最好的过滤方式是在输出和二次调用的时候进行加 HTML 实体一类的转码,防止脚本注入。         (2) 标签事件属性黑名单。特殊字符容易被绕过,所以还得加标签事件得黑名单或者白名单,这里推荐使用白名单的方式,实现规则可以直接使用正则表达式
             来匹配,如果匹配到的事件不在白名单列表,就可以直接拦截,而不是过滤为空。
      2.3.5 在工作中,一台线上 MySQL 数据库查询数据突然变得异常缓慢,如果交给你排查,请写出排查思路。       首先应该从系统级别来排查。先找出到底哪里慢,是特定操作慢呢,还是所有操作都慢了。       既然是突然变慢,那么就是说之前还是比较快的。自从某个特殊事件发生后,慢了下来。特殊事件一般包括:         1、程序做了修改。         2、突然有大数据量的系统访问。         3、某些不常用功能突然启用,或大量访问。         4、某些硬件出了功能性问题。       对于系统整体变慢,基本上还是先查系统日志。查最近的系统更新日志。查看磁盘剩余容量。硬件是否由异常。
      
    2.3.6 列出您认为 sql 优化可以从哪些方面进行?       1、sql 语句的执行计划是否正常。       2、减少应用和数据库的交互次数、同一个 sql 语句的执行次数。       3、数据库实体的碎片的整理(特别是对某些表经常进行 insert 和 delete 动作,尤其注意,索引字段为系列字段、自增长字段、时间字段,
            对于业务比较频繁的系统,最好一个月重建一次)。       
    4、减少表之间的关联,特别对于批量数据处理,尽量单表查询数据,统一在内存中进行逻辑处理,减少数据库压力(
            尽量用 c 或者 c++ 进行处理,效率大大提升)。       5、对访问频繁的数据,充分利用数据库 cache 和应用的缓存。       6、数据量比较大的,在设计过程中,为了减少其他表的关联,增加一些冗余字段,提高查询性能。
  • 相关阅读:
    【Azure 应用服务】由 Azure Functions runtime is unreachable 的错误消息推导出 ASYNC(异步)和 SYNC(同步)混用而引起ThreadPool耗尽问题
    【Azure API 管理】是否可以将Swagger 的API定义导入导Azure API Management中
    【Azure 应用服务】Azure Function 不能被触发
    【Azure 环境】Azure Key Vault (密钥保管库)中所保管的Keys, Secrets,Certificates是否可以实现数据粒度的权限控制呢?
    【Azure 事件中心】为应用程序网关(Application Gateway with WAF) 配置诊断日志,发送到事件中心
    【Azure 事件中心】azure-spring-cloud-stream-binder-eventhubs客户端组件问题, 实践消息非顺序可达
    【Azure API 管理】Azure API Management通过请求中的Path来限定其被访问的频率(如1秒一次)
    【Azure 环境】前端Web通过Azure AD获取Token时发生跨域问题(CORS Error)
    【Azure 应用服务】记一次Azure Spring Cloud 的部署错误 (az spring-cloud app deploy -g dev -s testdemo -n demo -p ./hellospring-0.0.1-SNAPSHOT.jar --->>> Failed to wait for deployment instances to be ready)
    【Azure 应用服务】App Service中抓取 Web Job 的 DUMP 办法
  • 原文地址:https://www.cnblogs.com/wangxiongbing/p/11307105.html
Copyright © 2011-2022 走看看