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中的各种函数有了初步了解, ...
随机推荐
- <再看TCP/IP第一卷>关于网络层及协议细节---IP协议(2)--移动IP及DHCP
题外话:本来想按照互联网的层级自下向上回顾这些协议的,但是今天实在得破个例,DHCP不得不说! 主机从一个网络迁移到另一个网络,那么IP编址的结构就要发生改变,当今主流有如下几种修改方案: (一)改变 ...
- Oracle的控制文件和日志文件
--什么是控制文件 控制文件是数据库的一个二进制文件,它主要记录数据库的名称. 数据库的数据文件存放位置等信息. 一个控制文件只能属于一个数据库.如果控制文件丢失,这数据库就无法操作. --下面查询语 ...
- jQuery应用之eraser.js使用,实现擦除、刮刮卡效果
jquery.eraser是一款使用鼠标或触摸的动作来擦除画布显示真正图片的插件.jquery.eraser插件的原理是用一个画布遮住图片,然后根据触摸或鼠标输入来擦除画布显示图片,您可以在参数中指定 ...
- java:类集操作,多对多的关系
java:类集操作,多对多的关系 //一个课程有多个学生报名, //一个学生可以报名多个课程 demo.java, Student.java, Course.java' public class Co ...
- 计算地球上两个坐标点(经度,纬度)之间距离sql函数
go --计算地球上两个坐标点(经度,纬度)之间距离sql函数 --作者:lordbaby --整理:www.aspbc.com CREATE FUNCTION [dbo].[fnGetDistanc ...
- 分享知识-快乐自己:mybatis 主键回调
以下两种方式实现 主键回掉方式. <!--添加用户信息:主键回调--> <insert id="insertUser" useGeneratedKeys=&quo ...
- C# 多线程 线程池(ThreadPool) 2 如何控制线程池?
线程池启动了,但是没有方法去控制线程池,如果子线程出现了问题,难道线程池就死了吗? 我们可以设置线程池的线程数量,进行加入任务,线程池会自动分配并且合理的执行,但是控制不了又有啥意思呢. 线程池里线程 ...
- jmeter--简单使用
1.启动jmeter 2.创建线程组 2.点击线程组,选择添加,选择sampler(采样器),选择http请求 3.在添加的请求页面中,填写服务器名称或IP,端口,路径,请求的方法 4.添加请求的参数 ...
- Python基础知识之字符串操作方法总结
Python 中字符串也是一种数据类型,针对此数据总结下常用的方法 1,字符串截取,变量[头下标:尾下标],就可以截取相应的字符串,其中下标是从0开始算起,可以是正数或负数,下标可以为空表示取到头或尾 ...
- Oracle学习笔记_04_多表查询
一.概念: 1.多表连接有以下几种分法: (1)内连接 vs 外连接 (左.右.满) (2)等值连接 vs 不等值连接 (3)非自连 ...