7.31实习培训日志-docker sql
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优化
理解驱动表:小结果集驱动大结果集
- 优化第一步:LEFT JOIN改为JOIN
- 尽量不要根据非驱动表的字段排序
- 优化第二步:去除所有JOIN,让MySQL自行决定!
mysql分析
- type 为ALL表示全表扫描 需优化
- rows 返回尽量少的记录
- 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 * 读取全部字段
“冒泡排序”在某些情况下(大多数数据是排好序的)其效率会高于所有的排序算法。

字符串操作很费性能,无论是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'");
- EXPLAIN 你的 SELECT 查询
- 当只要一行数据时使用 LIMIT 1
- 为搜索字段建索引
- 永远为每张表设置一个ID,好的是一个INT型的(推荐使用UNSIGNED),并设置上自动增加的AUTO_INCREMENT标志。
优化建议
- 可以存下我们数据的最小数据类型
- 使用简单的数据类型,int类型要比varchar类型,mysql处理更简单
- 尽量使用not null字段,因为innodb存储类型,尽量设置默认值
- 尽量少用text类型,非用不可的话需要考虑是否分表的方式解决。
建议总是要在SQL中使用基表,而不是视图。
索引使用
- 避免对索引字段进行计算操作
- 避免在索引字段上使用not,<>,!=
- 避免在索引列上使用IS NULL和IS NOT NULL (一定要作为索引列,考虑设置默认值)
- 避免在索引列上出现数据类型转换(包括隐式的类型转换)
- 避免在索引字段上使用函数
- 避免建立索引的列中使用空值。???
数据库不建立外键,外键在业务层实现
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的更多相关文章
- 7.27实习培训日志-Oracle SQL(三)
Oracle SQL(三) 视图 特性 简单视图 复杂视图 关联的表数量 1个 1个或多个 查询中包含函数 否 是 查询中包含分组数据 否 是 允许对视图进行DML操作 是 否 CREATE [OR ...
- 7.25实习培训日志-Oracle SQL(一)
Oracle SQL(一) 重点 尽量避免select *,影响性能,不直观. 慎用Distinct,会排序,影响性能,用exists 排序尽量利用索引,索引有序 索引列不要加函数,会使索引失效 外连 ...
- 7.26实习培训日志-Oracle SQL(二)
Oracle SQL(二) 条件表达式 CASE 语句 或者DECODE 函数,两者均可实现 IF-THEN-ELSE 的逻辑,相比较而言,DECODE 更加简洁 SELECT last_name , ...
- 7.13实习培训日志 Docker
静态博客github地址 静态博客github地址轻量版 Docker Docker镜像 Docker镜像概念 Docker镜像下载时的分层体现:一层层下载,下载过程中给出了每一层的 ID 的前 12 ...
- 7.30实习培训日志-SQL优化
总结 今天早上考试,下午主要是老师引导我们学习SQL优化,晚上主要是同学的技术分享,杨松柏同学主要给我们分享了java的io的一些东西,c10k问题,bio(同步阻塞IO),NIO(同步非阻塞IO), ...
- 7.12实习培训日志 Linux Docker
Linux 管理 RHEL7 的用户和组 用户的属性修改 chage -l [username] #查看用户信息 usermod --expiredate=YYYY-MM-DD [username] ...
- 7.24实习培训日志-Docker-Compose
Docker-Compose 对于昨天的考试,需要 项目根目录下需要docker/mysql/Dockerfile 文件用于构建mysql镜像 项目根目录下需要docker/java/Dockerfi ...
- 7.23实习培训日志-JDBC
总结 今天下午考试,JDBC,这个本身很简单,但是需要我们Dockerfile+Docker Compose运行,这个东西就很复杂.原来学习时没有怎么看,这一次就很懵,完全不知道怎么弄,反正环境都没有 ...
- 7.29实习培训日志-Oracle题目
总结 这周主要学习了SQL,oracle中的SQL基础,以前学习的是SQLserver的SQL,和oracle的还是有略微不同,所以重新去学习了一段时间,然后对于oracle中的各种函数有了初步了解, ...
随机推荐
- mini2440移植uboot 2014.04(一)
最新版的uboot添加了很多新功能,我决定在最新版代码基础上重新移植一遍加深理解. 我修改的代码已经上传到github上,地址:https://github.com/qiaoyuguo/u-boot- ...
- Codeforces 245H Queries for Number of Palindromes:区间dp
题目链接:http://codeforces.com/problemset/problem/245/H 题意: 给你一个字符串s. 然后有t个询问,每个询问给出x,y,问你区间[x,y]中的回文子串的 ...
- Codeforces Round #377 (Div. 2) F - Tourist Reform
前言:关于如何求双连通分量,我们可以在tarjan搜索时标记下所有桥的位置(双连通分量(可以认为是没有桥的无向图图)即可通过删去所有桥得到),那么怎么找桥呢,对于每一条搜索到的边u->x,如果l ...
- 一个很有参考意义的unity博客
http://blog.csdn.net/lyh916/article/details/45133101
- JS中的prototype、__proto__与constructor属性
作为一名前端工程师,必须搞懂JS中的prototype.__proto__与constructor属性,相信很多初学者对这些属性存在许多困惑,容易把它们混淆,本文旨在帮助大家理清它们之间的关系并彻底搞 ...
- Chrome_01_点击 Google搜索结果在新的页面打开
方法一:Ctrl + 左键 Chrome浏览器中,通过 Ctrl + 左键 ,是在新标签中打开的,通过 Shift + 左键 ,是在新窗口中打开的. 方法二: 1.登录 Google 2.进入下面的设 ...
- Navicate一个有用的注册码
NAVH-WK6A-DMVK-DKW3 百度直接得到,
- windows下安装 postgresql
1. 下载PostgreSQL的源代码.解压. 2. 在Windows平台下编译需要跳过一个权限的检测,否则在编译的时候可能会出现错误. 在\src\backend\main\main.c文件中将 ...
- Eclipse 反编译插件安装jad【转】
原文地址:http://tangmingjie2009.iteye.com/blog/1916992 Eclipse的反编译插件一直在用jad,感觉很不错. 刚下了个新版的eclipse,配置jad的 ...
- freeMarker(三)——模板开发指南之数值、类型
学习笔记,选自freeMarker中文文档,译自 Email: ddekany at users.sourceforge.net 模板开发指南——数值.类型 1.基本内容 1.1 什么是数值? 正如你 ...