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中的各种函数有了初步了解, ...
随机推荐
- 20165101 学习基础和C语言基础调查
学习基础和C语言基础调查 技能学习心得 看了15级学长学姐丰富的技能之后,我感到很惭愧.我的课外技能可以说是很糟糕.唱歌的话,小时候还可以用假声唱一下,变声之后就是高音上不去,低音下不来.体育更是差劲 ...
- 剑指offer之 从尾到头打印链表
package Problem5; import java.util.Stack; //首先定义链表结构class LinkNode{ LinkNode next; int node_value;} ...
- BZOJ 3890 [Usaco2015 Jan]Meeting Time:拓扑图dp
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3890 题意: 给你一个有向图,n个点(n <= 100),m条边. 且所有的边都是从 ...
- jQuery学习(3)
可以在select中设置size属性的属性值,从而让下拉列表中的选项都显示出来. <!DOCTYPE html> <html> <head> <title&g ...
- Redis-benchmark使用总结
Redis-benchmark为Redis性能测试工具. 指令说明: Usage: redis-benchmark [-h <host>] [-p <port>] [-c &l ...
- html中Meta属性
<!DOCTYPE html> <!-- 使用 HTML5 doctype,不区分大小写 --> <html lang="zh-cmn-Hans"&g ...
- Android中高效的显示图片之二——在非UI线程中处理图片
在“加载大图”文章中提到的BitmapFactory.decode*方法,如果源数据是在磁盘.网络或其它任何不是在内存中的位置,那么它都不应该在UI线程中执行.因为它的加载时间不可预测且依赖于一系列因 ...
- torch7 安装中Missing dependencies for nn:moses >= 1错误解决办法
Torch7.0安装步骤(默认安装路径是在home下): git clone https://github.com/torch/distro.git ~/torch --recursive cd ~/ ...
- Silk codec的一些资料
Skype表示它最近将开始向第三方开发人员和硬件制造商提供免版税认证(RF)的Silk宽带音频编码器. Silk下载地址如下 http://developer.skype.com/silk/SILK_ ...
- [基本操作]线段树分治和动态dp
不知道为什么要把这两个没什么关系的算法放到一起写...可能是都很黑科技? 1.线段树分治 例题:bzoj4026 二分图 给你一个图,资瓷加一条边,删一条边,询问当前图是不是二分图 如果用 LCT 的 ...