mysql临时表

mysql帮助文档学习笔记

烂漫一生 提交于 2019-11-27 02:30:45
多看下这个文章: LAMP 系统性能调优,第 3 部分: MySQL 服务器调优 http://www.ibm.com/developerworks/cn/linux/l-tune-lamp-3.html ------------------------------------------------------ 一些查看数据库状态的sql语句: 1、显示非临时表的状态 mysql> SHOW TABLE STATUS/G; *************************** 1. row *************************** Name: admin_users Engine: MyISAM Version: 10 Row_format: Dynamic Rows: 2 Avg_row_length: 34 Data_length: 68 Max_data_length: 281474976710655 Index_length: 3072 Data_free: 0 Auto_increment: 3 Create_time: 2009-12-02 17:23:07 Update_time: 2009-12-17 10:55:45 Check_time: 2009-12-02 17:23:07 Collation: latin1_swedish_ci

mysql存储过程中使用临时表

不问归期 提交于 2019-11-27 01:39:43
当工作在很大的表上时,您可能偶尔需要运行很多查询获得一个大量数据的小的子集,不是对整个表运行这些查询,而是让MySQL每次找出所需的少数记录,将记录选择到一个临时表可能更快些,然后多这些表运行查询。   创建临时表很容易,给正常的CREATE TABLE语句加上TEMPORARY关键字:   CREATE TEMPORARY TABLE tmp_table (   name VARCHAR(10) NOT NULL,   value INTEGER NOT NULL   )   临时表将在您连接MySQL期间存在。当您断开时,MySQL将自动删除表并释放所用的空间。当然您能够在仍然连接的时候删除表并释放空间。   DROP TABLE tmp_table   假如在您创建名为tmp_table临时表时名为tmp_table的表在数据库中已存在,临时表将有必要屏蔽(隐藏)非临时表 tmp_table。   假如您声明临时表是个HEAP表,MySQL也允许您指定在内存中创建他:   CREATE TEMPORARY TABLE tmp_table (   name VARCHAR(10) NOT NULL,   value INTEGER NOT NULL   ) TYPE = HEAP   因为HEAP表存储在内存中,您对他运行的查询可能比磁盘上的临时表快些。然而

mysql 视图

孤者浪人 提交于 2019-11-27 01:13:36
1、视图是一个虚拟表,可以认为对原表封装了一下,一般情况下,可以把视图当做表来对待。 2、视图的实现由两种策略:临时表算法与合并算法。临时表算法:把视图对原表的查询结果放在一个临时表中,以后对视图的操作就是对临时表的操作。合并算法:把对试图的操作转化为对原表的操作。 3、举例来说,mysql> create view bigAgeStuView as select * from stu where age>25; 对于查询 mysql> select * from bigAgeStuView where age<28; 如果采用临时表算法,Mysql会把select * from stu where age>25的结果放入一张临时表,再操作临时表,查找age>28 如果采用合并算法,Mysql会把对视图的查询转化为select * from bigAgeStuView where 25<age and age<28; 显然,临时表算法会存在严重的性能问题。 4、对于create view bigAgeStuView as select * from stu where age>25; 可以指定视图的算法,格式如下: mysql> create algorithm=temptable view bigAgeStuView as select * from stu where age>

前言、Mysql简介

家住魔仙堡 提交于 2019-11-26 23:42:23
一、Mysql5.7的新增功能 1、支持JSON,是一种可以替代XML的存储信息格式,从5.7.8版本开始支持 2、改进InnoDB的可扩展性和临时表的性能,从而实现更快的网络和大数据加载等操作 3、改进赋值包括多源复制、多从线程增强、在线GTIDs和增强的半同步复制 4、增加了许多新的监控功能,以减少空间和过载,使用新的SYS模式显著提高易用性 5、以安全第一为宗旨,提供了很多新的功能,从而保证数据库的安全 6、重写了大部分解释器、优化器和成本模型,提高了可维护性、可扩展性和性能 6、全新功能,包括InnoDB空间索引,使用Boost.Geometry,同时提高完整性和标准符合性 二、Excel访问Mysql 1、安装 来源: https://www.cnblogs.com/cloud-sj/p/11335508.html

Mysql CPU占用高的问题解决方法小结

梦想的初衷 提交于 2019-11-26 22:42:38
最近发现php网站发布信息比较慢,而且同网站目录下的asp经常登录后立即就重新登录,立即考虑到服务器资源占用问题,所以进服务器看到原来mysql占用率较高 25-60%左右,偶尔能跑到100%,所有导致上述问题的发生,根据之前的mysql配置,先将mysql的配置问题排除了,查看msyql是否运行正常,通过查看mysql data目录里面的*.err文件(将扩展名改为.txt)记事本查看即可。如果过大不建议用记事本了,容易死掉,可以用editplus等工具 简单的分为下面几个步骤来解决这个问题: 1、mysql运行正常,也有可能是同步设置问题导致 2、如果mysql运行正常,那就是php的一些sql语句导致问题发现,用root用户进入mysql管理 mysql -u root -p 输入密码 mysql:show processlist 语句,查找负荷最重的 SQL 语句,优化该SQL,比如适当建立某字段的索引。 通过这个命令我看到原来是有人恶意刷搜索,因为dedecms搜索后面调用搜索最高的词,导致很多人用工具刷这个,而且是定时有间隔的,所以将这个php程序改名跳转都方法解决了。 当然如果你的确实是sql语句用了大量的group by等语句,union联合查询等肯定会将mysql的占用率提高。所以就需要优化sql语句,网站尽量生成静态的,一般4W ip的静态网站

mysql 树形结构查询(存储过程)

喜欢而已 提交于 2019-11-26 19:04:25
就用数据数据库表地址数据(中国地区) 来说吧(用Windows 请使用 gbk !!) 可直接运行(去除注解) 存储过程: DELIMITER // drop procedure if exists findLChild // /* iid 递归父节点 , layer 允许递归深度 */ CREATE PROCEDURE findLChild(iid bigint ( 20 ),layer bigint ( 20 )) BEGIN /* 创建接受查询的临时表 */ create temporary table if not exists tmp_table(id bigint ( 20 ),name varchar ( 50 )) ENGINE = InnoDB DEFAULT CHARSET = utf8; /* 最高允许递归数 */ SET @@max_sp_recursion_depth = 99 ; call iterative(iid,layer); /* 核心数据收集 */ select * from tmp_table ; /* 展现 */ drop temporary table if exists tmp_table ; /* 删除临时表 */ END ; // DELIMITER ; DELIMITER // drop procedure if exists

MySql、PostgreSql、SqlServer三种数据库的造数存储过程实例

喜你入骨 提交于 2019-11-26 16:28:32
一、MySql造数存储过程实例 mysql造数 -- 第一步,创建临时表 CREATE TEMPORARY TABLE IF NOT EXISTS tmp_table ( `id` VARCHAR (64) NOT NULL, `second_id` VARCHAR (64) NOT NULL, `total_amount` DOUBLE (18, 2) DEFAULT NULL, `total_day` INT (11) DEFAULT NULL, `create_time` datetime NOT NULL, `edit_time` datetime DEFAULT NULL, `editor` VARCHAR (50) DEFAULT NULL, `status` INT (11) NOT NULL DEFAULT '0' ) DEFAULT CHARSET = utf8mb4; -- 第二步,使用前先清空临时表 TRUNCATE TABLE tmp_table; -- 第三步,定义存储过程 #定义存储过程 delimiter ##num_limit 要插入数据的数量,rand_limit 最大随机的数值 DROP PROCEDURE IF EXISTS insert_test_val ; CREATE PROCEDURE insert_test_val (IN num

很好的一篇讲解sql优化的文章

别说谁变了你拦得住时间么 提交于 2019-11-26 15:34:36
【问题现象】 线上mysql数据库爆出一个慢查询,DBA观察发现, 查询时服务器IO飙升,IO占用率达到100%, 执行时间长达7s左右 。 SQL语句如下: SELECT DISTINCT g.*, cp.name AS cp_name, c.name AS category_name, t.name AS type_name FROM gm_game g LEFT JOIN gm_cp cp ON cp.id = g.cp_id AND cp.deleted = 0 LEFT JOIN gm_category c ON c.id = g.category_id AND c.deleted = 0 LEFT JOIN gm_type t ON t.id = g.type_id AND t.deleted = 0 WHERE g.deleted = 0 ORDER BY g.modify_time DESC LIMIT 20 ; 【问题分析】 使用explain查看执行计划,结果如下: 这条sql语句的问题其实还是比较明显的: 查询了大量数据(包括数据条数、以及g.* ),然后使用临时表order by,但最终又只返回了20条数据。 DBA观察到的IO高,是因为sql语句生成了一个巨大的临时表,内存放不下,于是全部拷贝到磁盘,导致IO飙升。 【优化方案】 优化的总体思路是拆分sql

MySQL的(@i:=@i+1)用处及用法

亡梦爱人 提交于 2019-11-26 14:19:51
今天写一个为查询的数据排序列号的SQL语句,整理出来下面的笔记: 这是语法:    1 SELECT (@i:=@i+1) ,t.* FROM table_name t, (SELECT @i:=0) AS j (@i:=@i+1)代表定义一个变量,每次叠加1; (SELECT @i:=0) AS j 代表建立一个临时表,j是随便取的表名,但别名一定要的。 这里有几个案例:   1.单表查     执行SQL语句: 1 SELECT (@i:=@i+1),t2.phone,t2.name,t2.create_time FROM t_admin_copy_member t2,(SELECT@i:=0)AS j     执行结果:              2.若加个需求,按日期倒序排       SQL语句变为: 1 SELECT (@i:=@i+1),p.* 2 FROM ( 3 SELECT t2.phone,t2.name,t2.create_time FROM t_admin_copy_member t2 ORDER BY create_time DESC 4 )p,(SELECT@i:=0)k       执行结果:          来源: https://www.cnblogs.com/one-gril/p/11323759.html

详解 MySQL 中的 explain

你说的曾经没有我的故事 提交于 2019-11-26 14:14:18
知道什么时候该给表添加索引,以使用索引来查找记录从而让select 运行更快。如果由于不恰当使用索引而引起一些问题的话,可以运行 analyze table来更新该表的统计信息,例如键的基数,它能帮您在优化方面做出更好的选择。 explain 返回了一行记录,它包括了 select语句中用到的各个表的信息。这些表在结果中按照mysql即将执行的查询中读取的顺序列出来。mysql用一次扫描多次连接(single- sweep,multi-join)的方法来解决连接。这意味着mysql从第一个表中读取一条记录,然后在第二个表中查找到对应的记录,然后在第三个表 中查找,依次类推。当所有的表都扫描完了,它输出选择的字段并且回溯所有的表,直到找不到为止,因为有的表中可能有多条匹配的记录下一条记录将从该表读 取,再从下一个表开始继续处理。 在mysql version 4.1中,explain输出的结果格式改变了,使得它更适合例如 union语句、子查询以及派生表的结构。更令人注意的是,它新增了2个字段: id和 select_type。当你使用早于mysql4.1的版本就看不到这些字段了。 explain结果的每行记录显示了每个表的相关信息,每行记录都包含以下几个字段: id 本次 select 的标识符。在查询中每个 select都有一个顺序的数值。 select_type select