zoukankan      html  css  js  c++  java
  • MySql数据库

    ### MySql数据库

    1. sql的select 语句的执行顺序
    1. form子句组装来自不同数据源的数据
    2. where子句基于指定的条件对记录进行筛选
    3. group by子句将数据划分为多个分组
    4. 使用聚合函数进行计算
    5. 使用having子句筛选分组
    6. 计算所有的表达式
    7. select
    8. order by子句进行排序
    2. Mysql性能优化
    1. 当只要一行数据时使用limit 1:查询时如果已知会得到一条数据,这种情况加上limit 1会增加性能。因为Mysql数据库引擎会找到一条结果停止搜索,而不是继续查询下一条是否符合标准直到所有记录查询完毕
    2. 用not exists代替not in:not exists用到了连接能够发挥已经建立好的索引的作用,not in不能使用索引。not in是最慢的方式要同每条记录比较,在数据量比较大的操作中不建议使用
    3. 对操作符的优化,尽量不采用不利于索引的操作符:如in,not in, is null ,is not null,<>等
    3. Mysql数据库架构图
    4. Mysql架构器中各个模块都是什么?
    1. 连接管理和安全认证:每个客户端都会建立一个与服务器连接的线程,服务器会有一个线程池来管理这些连接;如果客户端需要连接到Mysql数据库还需要进行验证,包括用户名、密码、主机信息等
    2. 解析器是什么:主要分析查询语句,最终生成解析树;首先解析器会对查询语句的语法进行解析,分析语法是否有问题。还有解析器会查询缓存,如果缓存中有对应的语句,就返回查询结果不进行接下来的优化执行操作。前提是缓存中的数据没有被修改,当然如果修改了也会被清出缓存
    3. 优化器:主要作用对查询语句进行优化操作,包括选择合适的索引,数据的读取方式,包括获取查询的开销信息,统计信息等等
    4. 执行器:包括执行查询语句,返回查询结果,生成 执行计划包括与存储引擎的一些处理操作
    5. 事务的四大特性:原子性、隔离性、一致性、持久性
    6. Mysql中四种隔离级别
    - 读未提交:读未提交隔离级别也叫脏读,就是事务可以读取其他事务未提交的数
    - 读已提交:在其他数据库系统比如sql server默认的隔离级别就是提交读,已提交读隔离级别就是在事务未提交之前所作的修改其他事务是不可见的
    - 可重复读:保证同一个事务中的多次相同的查询的结果是一致的,比如一个事务一开始查询了一条记录过了几秒有执行了相同的查询,保证两次查询的结果是相同的,可重复读也是Mysql的默认隔离级别
    - 可串行化:可串行化就是保证读取的范围内没有新的数据插入,比如事务第一次查询得到某个范围的数据,第二次查询也同样得到了相同范围的数据,中间没有新的数据插入到该范围内
    7. 如何提高Mysql的安全性
    1. 如果Mysql客户端和服务器端的连接需要跨越并通过不可信任的网络,那么需要使用ssh隧道来加密该连接的通信
    2. 使用set password语句来修改用户的密码,先“mysql -u root”登录数据库系统,然后mysql>update mysql.user.set password=password('newpwd'),最后执行flush privileges
    3. Mysql需要提防的攻击有:防偷听、篡改、回放、拒绝服务等,不涉及可用性和容错方面。对所有的连接、查询、其他操作使用ACL(访问控制列表)是一种路由配置和控制网络访问的一种有力工具,它可控制路由器应该允许或拒绝数据包通过、可监控流量、可自上向下检查网络的安全性、可检查和过滤数据和限制不必要的路由更新,因此让网络资源节约成本的ACL配置技术在生活中越来越广泛应用
    4. 设置除了root用户外的其他用户不允许访问mysql主数据库中的user表
    5. 使用grant和revoke语句来进行用户访问控制的工作
    6. 不使用明文密码,而是使用通过md5()和sha1()等单向的哈希函数来设置密码
    7. 不要选用字典中的字来做密码
    8. 采用防火墙可以去掉50%外部的危险,让数据库系统躲在防火墙后面工作,或者放置在隔离区
    9. 从因特网上用nmap来扫描3306端口,也可以使用telnat server_host 3306的方法测试,不允许从非信任网络中访问数据库服务的3306号tcp端口,需要在防火墙或路由上做设定
    10. 服务器端要对sql进行预编译,避免sql注入攻击
    11. 在传递数据给mysql时检查一下大小
    12. 应用程序连接到数据库时应该使用一般的用户账号,开放少数必要权限给该用户
    13. 学会使用tcpdump和Strings工具来查看传输数据的安全性,例如tcpdump -l -i eth0 -w -src or dst port 3306 strings。以普通用户来启动mysql数据库服务
    14. 确信在mysql目录中只有启动数据库服务的用户才可以对文件有读和写的权限
    15. 不许将process和super权限赋给非管理用户,该mysql admin process list可以列举出当前执行的查询文本;super权限可用于切断客户端连接、改变服务器运行参数状态、控制拷贝复制数据库的服务器
    16. 如果不相信dns服务公司发服务,可以在主机名称允许表中只设置ip数据地址
    17. 使用max_user_connections变量来使mysqld服务进程,对一个指定账户限定连接数
    18. grant语句也支持资源控制选项

  • 相关阅读:
    bzoj4195 [Noi2015]程序自动分析
    bzoj4236 JOIOJI hash 模拟
    bzoj1012 [JSOI2008]最大数maxnumber
    day 4 名片管理系统 -函数版
    day 3 局部变量 全局变量
    day 2 函数的嵌套
    day1 函数 (独立功能代码块)
    day 14 元组
    day 13 字典dict 操作
    day 12 列表字典 补充
  • 原文地址:https://www.cnblogs.com/juddy/p/14330621.html
Copyright © 2011-2022 走看看