临时表

MySQL 配置优化

廉价感情. 提交于 2019-12-14 06:15:34
安装MySQL后,配置文件my.cnf在 /MySQL安装目录/share/mysql目录中,该目录中还包含多个配置文件可供参考,有my-large.cnf ,my-huge.cnf, my-medium.cnf,my-small.cnf,分别对应大中小型数据库应用的配置。win环境下即存在于MySQL安装目录中的.ini文件。 下面列出了对性能优化影响较大的主要变量,主要分为连接请求的变量和缓冲区变量。 1. 连接请求的变量: 1) max_connections MySQL的最大连接数,增加该值增加mysqld 要求的文件描述符的数量。如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接数越多,介于MySQL会为每个连接提供连接缓冲区,就会开销越多的内存,所以要适当调整该值,不能盲目提高设值。 数值过小会经常出现ERROR 1040: Too many connections错误,可以过’conn%’通配符查看当前状态的连接数量,以定夺该值的大小。 show variables like ‘max_connections’ 最大连接数 show status like ‘max_used_connections’响应的连接数 如下: mysql> show variables like ‘max_connections

Mysql安装、配置、优化

妖精的绣舞 提交于 2019-12-13 00:50:45
一: MYSQL安装和基本配置 在linux上安装,可以用包管理工具来安装,比较简单: RedHat 系列:yum -y install mysql mysql-server Debian系列:sudo apt-get install mysql mysql-server 安装之后不知道mysql装到哪了怎么办,用whereis mysql 命令来找一下。 先找到mysql的默认配置文件。一般来说,安装后有这么几个备选的配置: 1 my-huge.cnf my-innodb-heavy-4G.cnf my-large.cnf my-medium.cnf my-small.cnf  就2014年的机器配置来说,咱们直接用my-huge.cnf。把my-huge.cnf 复制到/etc/下,改名my.cnf。配置文件就有了, 然后启动mysql: /etc/init.d/mysqld start 。 安装之后默认的帐号是root, 密码为空。咱们要做的第一件事是改root密码。 进入mysql:mysql -uroot -p 选择数据库: use mysql 改密码: UPDATE user SET Password = PASSWORD(‘xxxx’) WHERE user = ‘root’; 刷新权限: FLUSH PRIVILEGES; 现在数据库装好了, 帐号和权限也设置了

Mysql安装、配置、优化

Deadly 提交于 2019-12-12 13:15:05
Mysql安装、配置、优化 一: MYSQL安装和基本配置 在linux上安装,可以用包管理工具来安装,比较简单: RedHat 系列:yum -y install mysql mysql-server Debian系列:sudo apt-get install mysql mysql-server 安装之后不知道mysql装到哪了怎么办,用whereis mysql 命令来找一下。 先找到mysql的默认配置文件。一般来说,安装后有这么几个备选的配置: 1 my-huge.cnf my-innodb-heavy-4G.cnf my-large.cnf my-medium.cnf my-small.cnf  就2014年的机器配置来说,咱们直接用my-huge.cnf。把my-huge.cnf 复制到/etc/下,改名my.cnf。配置文件就有了, 然后启动mysql: /etc/init.d/mysqld start 。 安装之后默认的帐号是root, 密码为空。咱们要做的第一件事是改root密码。 进入mysql:mysql -uroot -p 选择数据库: use mysql 改密码: UPDATE user SET Password = PASSWORD(‘xxxx’) WHERE user = ‘root’; 刷新权限: FLUSH PRIVILEGES;

MySQL Explain命令详解

廉价感情. 提交于 2019-12-12 04:32:31
一、EXPLAIN命令介绍 MySQL EXPLAIN命令是查询性能优化不可缺少的一部分,同时EXPLAIN 命令用法十分简单, 在 SELECT 语句前加上 Explain 就可以了 mysql > EXPLAIN SELECT a , b FROM t WHERE a = '100' ; + ----+-------------+-------+------------+------+---------------+--------+---------+-------+------+----------+-------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | + ----+-------------+-------+------------+------+---------------+--------+---------+-------+------+----------+-------------+ | 1 | SIMPLE | t | NULL | ref | ID_key | ID_key | 35 | const | 3 | 100 | Using index | + -

ORACLE-having、with的使用

我是研究僧i 提交于 2019-12-12 03:32:56
having的用法 having的用法,having一般是用在group的后面,一般是先用where 过滤返回行,用group by 对过滤后的行分组,用having 对分组后的行组进行过滤。 select * from table where aa= ‘1’ group by bb having sum(cc) >500 with的使用 With查询语句不是以select开始的,而是以“WITH”关键字开头 可认为在真正进行查询之前预先构造了一个临时表,之后便可多次使用它做进一步的分析和处理 WITH Clause方法的优点 增加了SQL的易读性,如果构造了多个子查询,结构会更清晰;更重要的是:“一次分析,多次使用”,这也是为什么会提供性能的地方,达到了“少读”的目标。 第一种使用子查询的方法表被扫描了两次,而使用WITH Clause方法,表仅被扫描一次。这样可以大大的提高数据分析和查询的效率。 另外,观察WITH Clause方法执行计划,其中“SYS_TEMP_XXXX”便是在运行过程中构造的中间统计结果临时表。 语法: --针对一个别名 with tmp as (select * from tb_name) --针对多个别名 with tmp as (select * from tb_name), tmp2 as (select * from tb_name2),

在论坛中出现的比较难的sql问题:15(生成动态删除列语句 分组内多行转为多列)

China☆狼群 提交于 2019-12-11 00:18:08
原文: 在论坛中出现的比较难的sql问题:15(生成动态删除列语句 分组内多行转为多列) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路。 1、如果去掉这个临时表中合计为0 的字段 http://bbs.csdn.net/topics/390625348 我有一个临时表 ##temp, 字段 住院号,床位,应收金额,优惠金额1,优惠金额2,优惠金额3,优惠金额4.。。。。优惠金额N 我想把临时表中 优惠金额X 合计为0的字段去掉,如何去? 又或者,生成另一个没有 优惠金额X 合计为0字段的临时表。 我的解法: -- drop table ##temp create table ##temp(住院号 varchar(20),床位 varchar(20),应收金额 numeric(20,3),优惠金额1 numeric(20,3),优惠金额2 numeric(20,3),优惠金额3 numeric(20,3),优惠金额4 numeric(20,3)) insert into ##tempselect '00000','111',1000, 0,0,0,10 union allselect '00001','112',1000, 0 ,0,0,0 union allselect '00002','113',1000, 0,0,0,0 union

数据库怎么优化查询的效率

一笑奈何 提交于 2019-12-10 19:39:48
1)数据库设计方面 : a. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 b. 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0 c. 并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。 d. 索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。 e. 应尽可能的避免更新索引数据列,因为索引数据列的顺序就是表记录的物理存储顺序,一旦该列值改变将导致整个表记录的顺序的调整,会耗费相当大的资源。若应用系统需要频繁更新索引数据列

SQL Server 存储过程的应用 创建带 Try Catch 的存储过程模板

a 夏天 提交于 2019-12-10 13:58:57
https://www.cnblogs.com/MuNet/archive/2013/02/27/5563411.html 1、创建带 Try Catch 的存储过程模板 Copy下面的代码,然后新建查询,就可以写sql语句,执行完后,一个你自己的存储过程就建立好了! SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- AUTHOR: -- DESCRIBE: -- ============================================= CREATE PROCEDURE [dbo].[UP_InsertJHBData] --存储过程名 @CustomerName VARCHAR(50) --参数 AS BEGIN SET NOCOUNT ON --提高性能的,必须要有 DECLARE @Now DATETIME SET @Now = GETDATE() --所有操作保证统一时间 BEGIN TRY --在这里写SQL END TRY BEGIN CATCH DECLARE @ErrorMessage NVARCHAR(4000) ; DECLARE @ErrorSeverity INT ; DECLARE

用SQL语句去掉重复的记录

两盒软妹~` 提交于 2019-12-09 14:36:28
删除手机(mobilePhone),电话(officePhone),邮件(email)同时都相同的数据 1. delete from 表 where id not in (select max(id) from 表 group by mobilePhone,officePhone,email ) or delete from 表 where id not in (select min(id) from 表 group by mobilePhone,officePhone,email ) 2.将没有重复的数据ID选出来放在临时表里,再将表的信息按临时表的选择出来的ID,将它们找出来插入到新的表,然后将原表删除 //查询出唯一数据的ID,并把他们导入临时表tmp中 select min(id) as mid into tmp from 表 group by mobilePhone,officePhone,email //查询出去重后的数据并插入finally表中 insert into finally select (除ID以外的字段) from customers_1 where id in (select mid from tmp) 查找表中存在这几个字段的重复数据并按照插入的时间先后进行删除 delete tmp from(   select row_num = row

ETL数据抽取方案

淺唱寂寞╮ 提交于 2019-12-09 11:30:04
ETL 过程中的主要环节就是数据抽取、数据转换和加工、数据装载。为了实现这些功能,ETL 工具会进行一些功能上的扩充,例如工作流、调度引擎、规则引擎、脚本支持、统计信息等。 一、数据抽取 数据抽取是从数据源中抽取数据的过程。实际应用中,数据源较多采用的是关系数据库。 从数据库中抽取数据一般有以下几种方式: 1.全量抽取 全量抽取类似于数据迁移或数据复制,它将数据源中的表或视图的数据原封不动的从数 据库中抽取出来,并转换成自己的ETL 工具可以识别的格式。全量抽取比较简单。 2.增量抽取 增量抽取只抽取自上次抽取以来数据库中要抽取的表中新增或修改的数据。在ETL 使用过程中,增量抽取较全量抽取应用更广。如何捕获变化的数据是增量抽取的关键。 对捕获方法一般有两点要求: 准确性:能够将业务系统中的变化数据按一定的频率准确地捕获到; 性能:不能对业务系统造成太大的压力,影响现有业务。目前增量数据抽取中常用的捕获变化数据的方法有: (1) 触发器方式(又称快照式) 在要抽取的表上建立需要的触发器,一般要建立插入、修改、删除三个触发器,每当源表中的数据发生变化,就被相应的触发器将变化的数据写入一个临时表,抽取线程从临时表中抽取数据,临时表中抽取过的数据被标记或删除。 优缺点 优点:数据抽取的性能高,ETL 加载规则简单,速度快,不需要修改业务系统表结构,可以实现数据的递增加载。 缺点