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中的各种函数有了初步了解, ...
随机推荐
- ScreenOS学习笔记
安全区段 第2层 V1-Trust 同一区段内的接口通信不需要策略,不同区段之间的接口通信则需要策略. Global区段没有接口 V1-Untrust V1-DMZ 第3层 Trust Untrust ...
- RabbitMQ之Exchange Direct模式
场景: 生产者发送消息到交换机并指定一个路由key, 消费者队列绑定到交换机时要指定路由key(key匹配就能接受消息,key不匹配就不能接受消息) 例如:我们可以把路由key设置为insert ,那 ...
- php之打印
echo 比较适合用来打印字符串,数字 print_r 一般打印数组 var_dump 可以打印所有类型,打印变量的类型及其值
- C# Winform 基于Task的异步与延时执行
一.Task的机制 Task位于命名空间System.Threading.Tasks中,是.NET 4.0加入的新模块,其实现机制大致类似于线程池ThreadPool,不过对于ThreadPool ...
- 51nod 1829(函数)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1829 本题目相当于: n个不同的小球,放入到m个可区分的盒子 ...
- IE input 去掉文本框的叉叉和密码输入框的眼睛图标
::-ms-clear, ::-ms-reveal{display: none;}
- BZOJ4695:最假女选手
浅谈区间最值操作和历史最值问题:https://www.cnblogs.com/AKMer/p/10225100.html 题目传送门:https://lydsy.com/JudgeOnline/pr ...
- Amaze UI 框架
Amaze UI 框架:官方网址 http://amazeui.org/ 演示地址 http://t.amazeui.org/kitchen-sink/#/ 该UI框架提供了 桌面系统WEB框架 和 ...
- HDOJ1073(gets 应用)
练习操作字符串的好题. #include<cstdio> #include<algorithm> #include<cstring> using namespace ...
- 安装LMS记
LMS学习管理系统,即英文Learning Management System的缩写.中文常用别名:在线学习系统. 尝试安装一款LMS,并进行二次开发. Moodle 首先想到的是Moodle.Moo ...