mysql临时表

Mysql 事件记录 | performance_schema全方位介绍

匿名 (未验证) 提交于 2019-12-02 22:06:11
在上一篇 初相识|performance_schema全方位介绍 中,我们详细介绍了performance_schema的配置表,坚持读完的是真爱,也恭喜大家翻过了一座火焰山。相信有不少人读完之后,已经迫不及待的想要跃跃欲试了,今天将带领大家一起踏上系列第三篇的征程(全系共7个篇章),在这一期里,我们将为大家全面讲解performance_schema中事件原始记录表。下面,请跟随我们一起开始performance_schema系统的学习之旅吧。 通常,我们在碰到性能瓶颈时,如果其他的方法难以找出性能瓶颈的时候(例如:硬件负载不高、SQL优化和库表结构优化都难以奏效的时候),我们常常需要借助于等待事件来进行分析,找出在MySQL Server内部,到底数据库响应慢是慢在哪里。 等待事件记录表包含三张表,这些表记录了当前与最近在MySQL实例中发生了哪些等待事件,时间消耗是多少。 events_waits_current表:记录当前正在执行的等待事件的,每个线程只记录1行记录 events_waits_history表:记录已经执行完的最近的等待事件历史,默认每个线程只记录10行记录 events_waits_history_long表:记录已经执行完的最近的等待事件历史,默认所有线程的总记录行数为10000行 要注意:等待事件相关配置中,setup

MySQL 快速删除大量数据

匿名 (未验证) 提交于 2019-12-02 22:06:11
千万级数据量 方案1、 直接使用delete 因delete执行速度与索引量成正比,若表中索引量较多,使用delete会耗费数小时甚至数天的时间 方案2、 (1)创建临时表,表结构与原表结构相同 (2)将需要保留的数据插入至临时表中 (3)drop原表 (4)将临时表改名为原表名 经过测试,drop表一般耗时在3秒以内 此方案主要耗时步骤为第二步,若需要保留的数据量不大时,此方案是最佳方案 来源:博客园 作者: 对我有点小自信 链接:https://www.cnblogs.com/luxd/p/11450881.html

MySQL中on与where的区别

匿名 (未验证) 提交于 2019-12-02 22:06:11
以left join为例: on: 生成临时表时 使用的条件,无论条件是否生效,都会返回左表的行(left join性质影响) where: 生成临时表之后 使用的条件,一定会过滤不满足设定条件的行 示例表: girl id g_name 1 Anna 2 Bill 3 Clark 4 Dell 5 Edward boy id b_name gf_id salary 1 a 1 8000 2 b 2 9000 3 c 3 10000 4 d 4 11000 5 e 6000 原始查询 select b.b_name,b.salary,g.g_name from boy b left join girl g on b.gf_id=g.id 结果: b_name salary g_name a 8000 Anna b 9000 Bill c 10000 Clark d 11000 Dell e 5000 (NULL) 原始查询+on(两个on使用and连接,可以看做( on b.gf_id=g.id,on salary>9000),但不能这么写,会有语法错误) select b.b_name,b.salary,g.g_name from boy b left join girl g on b.gf_id=g.id and salary>9000 结果: b_name salary g

Mysql表设计需要注意的问题

匿名 (未验证) 提交于 2019-12-02 22:02:20
下面探讨的数据库为MySQL 存储引擎为innodb因为这是最常见的,使用最多的数据库和引擎 什么是页分裂? 这是因为聚簇索引采用的是平衡二叉树算法,而且每个节点都保存了该主键所对应行的数据,假设插入数据的主键是自增长的,那么根据二叉树算法会很快的把该数据添加到某个节点下,而其他的节点不用动;但是如果插入的是不规则的数据,那么每次插入都会改变二叉树之前的数据状态。从而导致了页分裂。 为什么一定要设置一个主键 因为就算你不主动设置一个主键,innodb也会帮你生成一个隐藏列,作为自增主键来使用。所以,不管怎么样都会有自增主键,还不如自己指定一个,主键索引可以提高查询效率。 主键使用自增还是UUID 主键肯定是用自增。innodb种的主键是聚族索引,如果主键是自增的,那么每次插入的新数据都会顺序添加到当前索引节点的后续位置,当一页写满时,就会自动开启第二页,如果不是自增主键,那么就可能在中间插入,就会引发页的分裂,产生很多碎片,总之用自增主键性能更好。 UUID产生的索引文件更大,当数据量超过一百万行时,主键查询性能和索引文件大小都比UUID要更有效率和更小。 主键为什么不推荐有业务含义 1)因为任何含有业务的列都有改变的可能性,主键一旦带上业务含义,那么主键就有可能发生改变。主键发生改变,该数据在磁盘上的存储位置就会发生更改,有可能引发页分裂,产生空间碎片。 2

Mysql数据库常用语句笔记

纵饮孤独 提交于 2019-12-01 17:59:24
一、连接MySQL 格式: mysql -h 主机地址 -u 用户名 -p 用户密码 1、例1:连接到本机上的MYSQL。 首先在打开DOS窗口,然后进入目录 mysql bin,再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是: mysql>。 2、例2:连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令: mysql -h 110.110.110.110 -uroot -p abcd123 (注:u与root可以不用加空格,其它也一样) 3、退出MYSQL命令: exit (回车)。 二、修改密码 格式:mysqladmin -u用户名 -p旧密码 password 新密码 1、例1:给root加个密码ab12。首先在DOS下进入目录mysql bin,然后键入以下命令: mysqladmin -uroot -password ab12 注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。 2、例2:再将root的密码改为djg345。 mysqladmin -uroot -pab12 password djg345 三、增加新用户。 (注意:和上面不同

MySQL基础常见常用语句

大城市里の小女人 提交于 2019-12-01 17:55:27
数据库 # 查看所有的数据库 SHOW DATABASES ; # 创建一个数据库 CREATE DATABASE k; # 删除一个数据库 DROP DATABASE IF EXISTS k; # 使用这个数据库 USE k; 表 # 查看所有的表 SHOW TABLES ; # 创建一个表 CREATE TABLE n(id INT, name VARCHAR(10)); CREATE TABLE m(id INT, name VARCHAR(10), PRIMARY KEY (id), FOREIGN KEY (id) REFERENCES n(id), UNIQUE (name)); CREATE TABLE m(id INT, name VARCHAR(10)); # 直接将查询结果导入或复制到新创建的表 CREATE TABLE n SELECT * FROM m; # 新创建的表与一个存在的表的数据结构类似 CREATE TABLE m LIKE n; # 创建一个临时表 # 临时表将在你连接MySQL期间存在。当断开连接时,MySQL将自动删除表并释放所用的空间。也可手动删除。 CREATE TEMPORARY TABLE l(id INT, name VARCHAR(10)); # 直接将查询结果导入或复制到新创建的临时表 CREATE TEMPORARY

程序员面试中要注意什么 MySQL数据库表如何设计

▼魔方 西西 提交于 2019-12-01 16:26:25
序员面试中要注意什么?MySQL数据库表如何设计?如果要选择一门程序员必备的技能,那答案无疑是数据库,而MySQL是首选。很多企业在面试过程中会提问MySQL数据库表设计要注意什么,接下来千锋就给大家讲解一下。 MySQL相较于MSSQL SERVER和Oracle,是一款功能强大的小型数据库,能很好的满足千万级数据量的项目需要。注意,MySQL本身是没有可视化界面的,在Windows系统中你可以通过dos命令进行简单的连接和查看,在Linux系统下可以通过MySQL的命令进行连接查看。 MySQL支持很多种不同的数据类型,并且选择正确的数据类型对于获得高性能至关重要。在设计MySQL表时,你需要注意五点: 1、一定要设计主键 主键,又叫主关键字,用来唯一地标识表中的某一条记录。它能保证实体的完整性,加快数据库的操作速度,这一点很重要。主键使用自增最佳,这样每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页。如果不是自增主键,那么可能会在中间插入,就会引发页的分裂,产生很多表碎片。 2、字段命名最好避开保留字 在给字段命名的时候,要尽量避开关键字,以免出了问题而不好查找。虽然在以关键字命名的字段上加''可以不再报错,但保险起见,就不要这么设计。 3、表名长度尽可能短 表名称不要太长,Oracle限制字符为30个,如果有转数据库的需要

MySQL 视图

ε祈祈猫儿з 提交于 2019-12-01 06:16:17
一 、视图的类型 MERGE   将视图的sql语句和引用视图的sql语句合并在一起,最后一起执行。   2.TEMPTABLE   将视图的结果集存放在临时表中,每次执行时从临时表中操作。   3.UNDEFINED   默认的视图类型,DBMS倾向于选择而不是必定选择MERGE,因为MERGE的效率更高,更重要的是临时表视图不能更新。   所以,这里推荐使用MERGE算法类型视图。 二、视图的特性 视图是对若干张基本表的引用,一张虚表,查询语句执行的结果,不存储具体的数据(基本表数据发生了改变,视图也会跟着改变)。 可以跟基本表一样,进行增删改查操作(ps:增删改操作有条件限制)。 三、视图的作用 方便操作,特别是查询操作,减少复杂的SQL语句,增强可读性; 更加安全,数据库授权命令不能限定到特定行和特定列,但是通过合理创建视图,可以把权限限定到行列级别 参考资料: Mysql视图使用总结 MySQL 视图 来源: https://www.cnblogs.com/songsongblue/p/11664424.html

mysql45讲

狂风中的少年 提交于 2019-12-01 06:12:37
一共48讲,学习时间2天。 开篇词 (1讲) 开篇词 | 这一次,让我们一起来搞懂MySQL 理论指导实践:先系统性的学习原理,再实践验证。 你可以从点到线再到面,形成自己到mysql知识网络。 在使用mysql时心里有底,知道怎么选择并且明白为什么。 了解原理,才能在实践中不断创新,提升个人到价值和工作输出。 基础篇 (8讲) 01 | 基础架构:一条SQL查询语句是如何执行的? 不要使用缓存,query_cache_type设置成DEMAND,这样默认不使用查询缓存。 要使用查询缓存的语句,用SQL_CACHE显示指定:select SQL_CACHE * from T where id = 10; MYSQL8.0开始删除了查询缓存功能。 慢查询日志中的rows_examined字段,表示这个语句执行过程中扫描了多少行 02 | 日志系统:一条SQL更新语句是如何执行的? 1.⾸先客户端通过tcp/ip发送⼀条sql语句到server层的SQL interface 2.SQL interface接到该请求后,先对该条语句进⾏解析,验证权限是否匹配 3.验证通过以后,分析器会对该语句分析,是否语法有错误等 4.接下来是优化器器⽣成相应的执⾏计划,选择最优的执⾏计划 5.之后会是执⾏器根据执⾏计划执⾏这条语句。在这⼀步会去open table,如果该table上有MDL,则等待。

带你认识MySQL sys schema

蹲街弑〆低调 提交于 2019-12-01 04:27:26
前言: MySQL 5.7中引入了一个新的sys schema,sys是一个MySQL自带的系统库,在安装MySQL 5.7以后的版本,使用mysqld进行初始化时,会自动创建sys库。 sys库里面的表、视图、函数、存储过程可以使我们更方便、快捷的了解到MySQL的一些信息,比如哪些语句使用了临时表、哪个SQL没有使用索引、哪个schema中有冗余索引、查找使用全表扫描的SQL、查找用户占用的IO等,sys库里这些视图中的数据,大多是从performance_schema里面获得的。目标是把performance_schema的复杂度降低,让我们更快的了解DB的运行情况。 1.sys库总览 本篇文章是基于MySQL 5.7.23版本实验的。打开sys库(希望你跟着我一起做哦),我们会发现sys schema里包含1个表,100个视图,存储过程及函数共48个,如下图所示: 其实我们经常用到的是sys schema下的视图,下面将主要介绍各个视图的作用,我们发现sys schema里的视图主要分为两类,一类是正常以字母开头的,共52个,一类是以 x$ 开头的,共48个。字母开头的视图显示的是格式化数据,更易读,而 x$ 开头的视图适合工具采集数据,显示的是原始未处理过的数据。 下面我们将按类别来分析以字母开头的52个视图: host_summary :这个是服务器层面的,以IP分组