docker

mysql docker问题

今天问了老师有关docker的问题,entrypoint和cmd的区别,两者同时存在cmd的执行结果会被当做参数传入entrypoint。

dockerfile中,从别人拉一个dockerfile,run等命令都是继承的,但是entrypoint和cmd不是继承的,是覆盖式的,最好不要覆盖这两个文件,如果需要修改,可以在官方原有entrypoint中提供的docker-entrypoint.sh中添加自己的需求。

在mysql的镜像中,我们需要执行的一个SQL文件,可以直接放在/docker-entrypoint-initdb.d/下面直接会执行,最好不要用自己的sh去覆盖官方的docker-entrypoint.sh等,需要修改也最好在官方的基础上修改。

SQL优化

mysql优化

理解驱动表:小结果集驱动大结果集

  1. 优化第一步:LEFT JOIN改为JOIN
  2. 尽量不要根据非驱动表的字段排序
  3. 优化第二步:去除所有JOIN,让MySQL自行决定!

mysql分析

  1. type 为ALL表示全表扫描 需优化
  2. rows 返回尽量少的记录
  3. Extra列中的:using where 表示不走索引的过滤条件,using filesort表示没有用索引排序,using temporary表示用到临时表,考虑能否等价改写去掉它

mysql开发规范

不要把MySQL的存储过程和触发器视为洪水猛兽,用好的话,没有问题的,真遇到问题了再优化也不迟。另外,MySQL因为没有物化视图,因此视图能不用就尽量少用吧。

其实从5.6开始,建议优先选择DATETIME存储日期时间,因为它的可用范围比TIMESTAMP更大,物理存储上仅比TIMESTAMP多1个字节,整体性能上的损失并不大。

所有字段定义中,默认都加上NOT NULL约束,除非必须为NULL(但我也想不出来什么场景下必须要在数据库中存储NULL值,可以用0来表示)。在对该字段进行COUNT()统计时,统计结果更准确(值为NULL的不会被COUNT统计进去),或者执行 WHERE column IS NULL 检索时,也可以快速返回结果。

尽可能不要直接 SELECT * 读取全部字段

老叶观点:MySQL开发规范之我见: (推荐)

“冒泡排序”在某些情况下(大多数数据是排好序的)其效率会高于所有的排序算法。

字符串操作很费性能,无论是strcpy, strcat还是strlen,能用整型最好用整型。

MYSQL性能优化

为查询缓存优化你的查询

-- 查询缓存不开启  NOW() 和 RAND() 或是其它的诸如此类的SQL函数都不会开启查询缓存
$r = mysql_query("SELECT username FROM user WHERE signup_date >= CURDATE()");
-- 开启查询缓存 用一个变量来代替MySQL的函数
$today = date("Y-m-d");
$r = mysql_query("SELECT username FROM user WHERE signup_date >= '$today'");
  1. EXPLAIN 你的 SELECT 查询
  2. 当只要一行数据时使用 LIMIT 1
  3. 为搜索字段建索引
  4. 永远为每张表设置一个ID,好的是一个INT型的(推荐使用UNSIGNED),并设置上自动增加的AUTO_INCREMENT标志。

优化建议

  1. 可以存下我们数据的最小数据类型
  2. 使用简单的数据类型,int类型要比varchar类型,mysql处理更简单
  3. 尽量使用not null字段,因为innodb存储类型,尽量设置默认值
  4. 尽量少用text类型,非用不可的话需要考虑是否分表的方式解决。

建议总是要在SQL中使用基表,而不是视图。

索引使用

  1. 避免对索引字段进行计算操作
  2. 避免在索引字段上使用not,<>,!=
  3. 避免在索引列上使用IS NULL和IS NOT NULL (一定要作为索引列,考虑设置默认值)
  4. 避免在索引列上出现数据类型转换(包括隐式的类型转换)
  5. 避免在索引字段上使用函数
  6. 避免建立索引的列中使用空值。???

数据库不建立外键,外键在业务层实现

id不要用UUID

数据库对比:Mysql vs Oracle

自动增长的数据类型

Mysql有自动增长的数据类型 auto_increment ;

Oracle 没有自动增长的数据类型,需要建立一个序列 SEQUENCE;

group by 用法

Mysql 中 group by 在select 语句中可以随意使用;

Oracle中如果查询语句中有组函数,那其他列名必须是组函数处理过的或者是group by 子句中的列,否则报错;

引号问题

Mysql中单双引号均可;

Oracle以单引号包裹字符串,双引号包裹别名。

oracle生成awr

instantclient

下载instantclient-basic和instantclient-sqlplus,注意选择合适的版本和平台,然后解压到同一个文件夹下,然后配置tns,在文件夹下建一个tnsname.ora文件,如下配置。然后配置tns环境变量位置,具体百度,这个Navicat和plsql develop登录需要配置的监听。

winXP =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.15.70)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)

sqlplus

配置sqlplus的环境变量,然后sqlplus student1/student1@192.168.15.70:1521/orcl登录,注意需要有权限,需要提前授权然后才能生成awr报告,然后@+你的awrrpt.sql文件生成awr报告,默认在c盘你的用户目录下。

sqlplus system/oracle@192.168.99.100:1521/xe

7.31实习培训日志-docker sql的更多相关文章

  1. 7.27实习培训日志-Oracle SQL(三)

    Oracle SQL(三) 视图 特性 简单视图 复杂视图 关联的表数量 1个 1个或多个 查询中包含函数 否 是 查询中包含分组数据 否 是 允许对视图进行DML操作 是 否 CREATE [OR ...

  2. 7.25实习培训日志-Oracle SQL(一)

    Oracle SQL(一) 重点 尽量避免select *,影响性能,不直观. 慎用Distinct,会排序,影响性能,用exists 排序尽量利用索引,索引有序 索引列不要加函数,会使索引失效 外连 ...

  3. 7.26实习培训日志-Oracle SQL(二)

    Oracle SQL(二) 条件表达式 CASE 语句 或者DECODE 函数,两者均可实现 IF-THEN-ELSE 的逻辑,相比较而言,DECODE 更加简洁 SELECT last_name , ...

  4. 7.13实习培训日志 Docker

    静态博客github地址 静态博客github地址轻量版 Docker Docker镜像 Docker镜像概念 Docker镜像下载时的分层体现:一层层下载,下载过程中给出了每一层的 ID 的前 12 ...

  5. 7.30实习培训日志-SQL优化

    总结 今天早上考试,下午主要是老师引导我们学习SQL优化,晚上主要是同学的技术分享,杨松柏同学主要给我们分享了java的io的一些东西,c10k问题,bio(同步阻塞IO),NIO(同步非阻塞IO), ...

  6. 7.12实习培训日志 Linux Docker

    Linux 管理 RHEL7 的用户和组 用户的属性修改 chage -l [username] #查看用户信息 usermod --expiredate=YYYY-MM-DD [username] ...

  7. 7.24实习培训日志-Docker-Compose

    Docker-Compose 对于昨天的考试,需要 项目根目录下需要docker/mysql/Dockerfile 文件用于构建mysql镜像 项目根目录下需要docker/java/Dockerfi ...

  8. 7.23实习培训日志-JDBC

    总结 今天下午考试,JDBC,这个本身很简单,但是需要我们Dockerfile+Docker Compose运行,这个东西就很复杂.原来学习时没有怎么看,这一次就很懵,完全不知道怎么弄,反正环境都没有 ...

  9. 7.29实习培训日志-Oracle题目

    总结 这周主要学习了SQL,oracle中的SQL基础,以前学习的是SQLserver的SQL,和oracle的还是有略微不同,所以重新去学习了一段时间,然后对于oracle中的各种函数有了初步了解, ...

随机推荐

  1. 顺序表的静态存储(C语言实现)

    顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构.  1.顺序表的结构体声明 #define MAX_SIZE 5 //定义数组的大小 typed ...

  2. POJ 2253 Frogger(warshall算法)

    题意:湖中有很多石头,两只青蛙分别位于两块石头上.其中一只青蛙要经过一系列的跳跃,先跳到其他石头上,最后跳到另一只青蛙那里.目的是求出所有路径中最大变长的最小值(就是在到达目的地的路径中,找出青蛙需要 ...

  3. type为number的input标签输入小数的方法

    纠结了一段时间都没找出方法,最后灵光一现想出这个方法,没想到测试下果然成功了! 看目前网上几乎很难找到相对应的解决方法,所以这里分享出来,如果有更佳方法欢迎提出. 方法如下: <input ty ...

  4. BEC listen and translation exercise 40

    However, recently there's been more and more interest in the development of ostrich farming in other ...

  5. hdu-5583 Kingdom of Black and White(数学,贪心,暴力)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5583 Kingdom of Black and White Time Limit: 2000/1000 ...

  6. leetcode 2 Add Two Numbers(链表)

    数字反过来这个没有什么麻烦,就是镜像的去算十进制加法就可以了,然后就是简单的链表. /** * Definition for singly-linked list. * struct ListNode ...

  7. 【leetcode刷题笔记】Longest Consecutive Sequence

    Given an unsorted array of integers, find the length of the longest consecutive elements sequence. F ...

  8. [: xxxx: Unexpected operator

    /*************************************************************************** * [: xxxx: Unexpected o ...

  9. 记一次编译tensorflow-gpu爬过的坑

    废话不多说,先说最终成功的版本:系统=>centos7 ,cuda=>10.0 ,cudnn=>7.5 ,nccl=>源码编译, tensorflow=>最新版本源码编译 ...

  10. oracle 12c 新特性之不可见字段

    在Oracle 11g R1中,Oracle以不可见索引和虚拟字段的形式引入了一些不错的增强特性.继承前者并发扬光大,Oracle 12c 中引入了不可见字段思想.在之前的版本中,为了隐藏重要的数据字 ...