mysql临时表

Mysql-explain之Using temporary和Using filesort解决方案

家住魔仙堡 提交于 2019-12-01 02:30:51
项目刚刚告一段落,boos又让优化几个主要界面 程序代码方便的优化就不讲了,主要说MySQL的优化 首先查看explain执行计划,让主要查询语句使用索引,索引type级别最好达到ref | ref_eq级别 其次将extra一栏的Using temporary(临时表)、Using filesort(文件排序)拖出去砍了 第一条语句 explain select * from tb_wm_shop where is_delete != 1 and is_authentication = 1 ORDER BY create_time DESC 大家应该知道使用order by的 字段要使用索引,这条语句中create_time已经创建了索引,但是计划中并没有使用该索引,导致出现了Using filesort文件排序,使其查询变慢 解决方法如下: 从where条件开始,依照顺序创建一个组合索引,就可以砍掉Using filesort这个令人讨厌的头颅了 注意:必须依照顺序,在创建组合索引时,where条件的字段在orderBy的字段之前,如果orderBy是多字段,则必须依照顺序创建 详情可参考链接: https://blog.csdn.net/dingxingmei/article/details/49096591 第二条语句 explain select s.* from tb

mysql详解

☆樱花仙子☆ 提交于 2019-12-01 01:19:52
数据库 """ 1、什么是数据库:管理数据的系统 - 安装某种管理数据的系统 - 管理的对象本质是文件 2、存储数据的位置:内存、硬盘 3、什么是系统:运行在硬件基础上,管理其他软件 """ # 数据库的组成 """ 库:存放多张表 - 文件夹 表:包含多条相同结构的记录 - 文件 记录:包含多个key-value键值对的一条数据 - 二进制数据 字段:描述信息 - 信息本身 == key-value - 二进制数据 stu id name age gender 1 Bob 18 男 2 Tom 17 女 ... teacher ... """ 数据库的分类 # 1)关系与非关系 # 关系:数据库中表与表之间有联系 - mysql # 非关系:没有表概念 - redis、mongodb(介于关系与非关系) # 2)内存与硬盘 # 硬盘:数据可以永久存储 - mysql、mongodb # 内存:数据的存取效率极高 - redis、memcache # 3)sql与nosql # sql:数据库操作通过sql语句 # nosql:数据库操作就是key-value形式(value就是一条记录) # stu - {'name': 'Bob', 'age': 18} # stus - [{'name': 'Bob', 'age': 18}, {'name': 'Tom', 'age':

MYSQL常用语句

陌路散爱 提交于 2019-12-01 00:49:58
# 查看所有的数据库 SHOW DATABASES ; # 创建一个数据库 CREATE DATABASE k; # 删除一个数据库 DROP DATABASE 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 TABLE tt SELECT *

SQL相关优化

拟墨画扇 提交于 2019-11-30 18:43:52
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/samjustin1/article/details/52314813 第一方面:30种mysql优化sql语句查询的方法 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。   2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。   3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:   select id from t where num is null   可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:   select id from t where num=0   4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:   select id from t where num=10 or num=20   可以这样查询:   select id from t where num=10   union all   select id from t where num=20  

Mysql中Explain详解

爱⌒轻易说出口 提交于 2019-11-30 17:30:47
当我们使用索引的时候,通常会用explain来检查我们索引使用的情况。 id列: 这一列总是包含一个编号,标示select所属的行。如果在语句当中没有子查询或联合,那么只会有的select,于是每一个在这个列中都将显示一个1.否则,内层的select语句一般会顺序编号,对应与其在原始语句中的位置。 Mysql将select查询分为简单和复杂类型,复杂类型可分成三大类:简单子查询,所谓的派生表(在from字句中的子查询),以及union查询。 1、这个是简单的子查询: 2、from子句中的子查询和联合给id列增加了更多的复杂性。下面是一个from字句中的基本子查询。 这个查询语句执行时有一个匿名临时表。MySQL内部通过别名(der)在外层查询中引用这个临时表,在更复杂的查询中可以看到ref列。 3、下面是一个UNION查询。 Explain select 1 union all select 1; 注意union结果输出中的额外行。union结果总是放在一个匿名临时表中,之后MySQL将结果读取到临时表临时表外。临时表并不在原sql中出现,因此他的id列是null,与之前的例子相比(演示子查询的那个from字句中),从这个查询产生的临时表在结果中出现在最后一行,而不是第一行。 select_type列 这一列显示对应行是简单还是复杂的select(如果是后者

数据库系统原理(第四章:SQL与关系数据库基本操作 )

余生长醉 提交于 2019-11-30 17:06:52
一、SQL概述 sql是结构化查询语言(Structured Query Language,SQL)是专门用来与数 据库通信的语言,它可以帮助用户操作关系数据库。 SQL的特点: SQL不是某个特定数据库供应商专有的语言; SQL简单易学 ;SQL强大、灵活,可以进行非常复杂和高级的数据库操作 SQL的组成: 数据查询 数据定义语言(Data Definition Language,DDL) 数据操纵(DML) 数据控制(DCL) *******************数据定义语言********************** CREATE 创建数据库或数据库对象 ALTER 对数据库或数据库对象进行修改 DROP 删除数据库或数据库对象 ************数据操纵语言(Data Manipulation Language,DML)*********** SELECT 从表或视图中检索数据 INSERT 将数据插入到表或视图中 UPDATE 修改表或视图中的数据 DELETE 从表或视图中删除数据 ***************数据控制语言(Data Control Language,DCL)**************** GRANT 用于授予权限 REVOKE 用于收回权限 二、MySQL预备知识 嵌入式和动态SQL规则: 规定了SQL语句在高级语言程序设计中

mysql数据库之批量更新语法

落花浮王杯 提交于 2019-11-30 12:06:07
1.insert into ...on duplicate key update批量更新 2.replace into 批量更新 3.临时表 SELECT * FROM `makemoneyinfo` where dakuanaccount = accountnumber order by creationtime select no,bank2 from sap_cw_notice where no in( SELECT bankid FROM `makemoneyinfo` where dakuanaccount = accountnumber ) dakuanaccount(财务账号) update makemoneyinfo set dakuanaccount = case when no = '' then '' end, dakuanaccount = end --批量更新 列的位置 ,从一个表导入另一个(只关心列的位置) replace into makemoneyinfo( name, id) select rname, rtitle, rmood from tb2; 创建临时表,先更新临时表,然后从临时表中update select * from tmp; -- 创建临时表 CREATE TEMPORARY TABLE tmp ( NO VARCHAR ( 100

php操作MySQL

这一生的挚爱 提交于 2019-11-30 07:10:26
php与mysql数据库,PHP支持很多数据库,与mysql为牛逼组合,mysql数据库的基础知识的掌握是由必要的,要了解如何操作mysql数据库,数据表的方法。 什么是数据库,数据库能做什么,数据库有什么好处,数据库的基础必备技术,备份和恢复的方法。 mysql的好处,功能强大,支持跨平台,运行速度快,支持面向对象,成本低,支持各种开发语言,数据库存储容量大,支持强大的内置函数。 启动MySQL服务器 net start mysql 连接数据库: mysql –u root –h127.0.0.1 –p password 断开MySQL服务器: quit; 停止MySQL服务器: net stop mysql; mysqladmin –uroot shutdown –proot 数据库的操作: CREATE [TEMPORARY] TABLE [IF NOT EXISTS] 数据表名 [(create_definition,…)][table_options] [select_statement] temporary 表示创建一个临时表 if not exists 表示表是否已经存在 create_definition 表的一些特性 select_statement 快速创建表 col_name type [NOT NULL | NULL] [DEFAULT default

Linux Centos 7 - MySQL 5.7离线安装

大城市里の小女人 提交于 2019-11-30 04:17:07
内部网络通过离线包的方式进行安装。 一、下载 下载地址:https://dev.mysql.com/downloads/mysql/ 进入页面后,点击右侧链接。 下载对应版本。 通过xftp6等工具上传到服务器上。 二、安装和配置 2.1 查询并卸载系统自带的Mariadb rpm -qa | grep mariadb rpm -e --nodeps 文件名 2.2 建立用户组和用户 检查mysql组合用户是否存在 # 检查mysql组和用户是否存在,如无则创建 cat /etc/group | grep mysql cat /etc/passwd | grep mysql 建立1个mysql用户和mysql用户组 # 添加mysql用户组 groupadd mysql # 添加mysql用户 useradd -g mysql mysql -d /home/mysql # 修改mysql用户的登陆密码 passwd mysql 2.3 创建临时目录、数据目录和日志目录 /home/mysql/3306/data /home/mysql/3306/log /home/mysql/3306/tmp 2.4 解压并修改权限 将下载的mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz安装包上传至服务器/usr/local目录下 # 再解压缩 tar

mysql命令大全

寵の児 提交于 2019-11-29 21:24:54
基本操作 – 启动MySQL net start mysql – 创建Windows服务 sc create mysql binPath= mysqld_bin_path(注意:等号与值之间有空格) 连接与断开服务器 mysql -h 地址 -P 端口 -u 用户名 -p 密码 SHOW PROCESSLIST -- 显示哪些线程正在运行 SHOW VARIABLES -- 显示系统变量信息 一. 数据库操作 查看当前数据库 SELECT DATABASE(); 显示当前时间、用户名、数据库版本 SELECT now(), user(), version(); 创建库 CREATE DATABASE[ IF NOT EXISTS] 数据库名 数据库选项 数据库选项: CHARACTER SET charset_name COLLATE collation_name 查看已有库 SHOW DATABASES[ LIKE 'PATTERN'] – 查看当前库信息 SHOW CREATE DATABASE 数据库名 – 修改库的选项信息 ALTER DATABASE 库名 选项信息 – 删除库 DROP DATABASE[ IF EXISTS] 数据库名 同时删除该数据库相关的目录及其目录内容 二. 表的操作 创建表 CREATE [TEMPORARY] TABLE[ IF NOT