临时表

sqlserver 去除重复的行数据

孤人 提交于 2019-12-02 22:42:34
利用 distinct 关键字过滤重复的行,将查询的结果写入临时表 select distinct * into #temp from mytable 删除原表的数据 delete mytable将临时表插入到表中 insert mytable select * from #temp释放临时表 drop table #temp删除数据行是NULL的delete from mytable where time is null 来源: https://www.cnblogs.com/Haihong72H/p/11765451.html

mysql 临时表使用

匿名 (未验证) 提交于 2019-12-02 22:06:11
语法 : create temporary table temptable_name 1.和实体表一样有主键、索引 2.在一次查询中不能同时使用2次临时表 (Can’t reopen table) 3.生命周期只在一个连接中,断开连接临时表会被释放 4.临时表分内存临时表和磁盘临时表,当临时表存储空间大于 ‘tmp_table_size’ 值时,会在磁盘上创建临时表,从而效率下降 文章来源: mysql 临时表使用

MySQL设计表规范

匿名 (未验证) 提交于 2019-12-02 22:06:11
所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用 MySQL 保留关键字【设计表后逐一排查】 所有表必须使用 Innodb 存储引擎,数据库和表的字符集统一使用 UTF8 所有表和字段都需要添加注释 禁止在数据库中存储图片,文件等大的二进制数据 【 通常存储于文件服务器,数据库只存储文件地址信息 】 优先选择符合存储需要的最小的数据类型【能用整型就不要用字符串】【ip字符串转换成整型】 避免使用text,blob类型,会大大降低SQL执行效率 避免使用ENUM类型,无法使用索引,查询效率低 尽可能把所有列定义为 NOT NULL【实在不行赋予默认值】 【索引 NULL 列需要额外的空间来保存,所以要占用更多的空间】 使用 TIMESTAMP(4 个字节) 或 DATETIME 类型 (8 个字节) 存储时间【切忌使用字符串】 同财务相关的金额类数据必须使用 decimal 类型【精准浮点数据类型,double和float是非精准的】 第一范式:具备原子性,不可分解。 id name age address 其中address可以细分为国家,省市,区域。 第二范式:需要确保数据库表中每一列都和主键相关 第三范式:不允许数据冗余 1.所有数据库对象名称必须使用小写字母并用下划线分割 表名:users,users_like-videos,users_fans

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

SQL语句优化

匿名 (未验证) 提交于 2019-12-02 22:02:20
怎么加快查询速度,优化查询效率,主要原则就是应尽量避免全表扫描,应该考虑在where及order by 涉及的列上建立索引。   建立索引不是建的越多越好,原则是:   第一:一个表的索引不是越多越好,也没有一个具体的数字,根据以往的经验,一个表的索引最多不能超过6个,因为索引越多,对update和insert操作也会有性能的影响,涉及到索引的新建和重建操作。   第二:建立索引的方法论为:   多数查询经常使用的列;   很少进行修改操作的列;   索引需要建立在数据差异化大的列上   利用以上的基础我们讨论一下如何优化sql. 1、sql语句模型结构优化指导     a. ORDER BY + LIMIT组合的索引优化       如果一个SQL语句形如:SELECT [column1],[column2],…. FROM [TABLE] ORDER BY [sort] LIMIT [offset],[LIMIT];       这个SQL语句优化比较简单,在[sort]这个栏位上建立索引即可。     b. WHERE + ORDER BY + LIMIT组合的索引优化       如果一个SQL语句形如:SELECT [column1],[column2],…. FROM [TABLE] WHERE [columnX] = [VALUE] ORDER BY [sort]

数据库的索引有哪集中,怎么提高数据库查询效率

做~自己de王妃 提交于 2019-12-02 21:36:16
1、数据库的索引有哪几种? https://www.cnblogs.com/sessionbest/articles/8689255.html 2、在一个千万级的数据库查寻中,如何提高查询效率? : https://www.cnblogs.com/Can-daydayup/p/8463877.html 3、使用SQL语句查询重复的数据有哪些? https://www.cnblogs.com/Can-daydayup/p/10454336.html 使用SQL删除多余的重复数据,并保留Id最小的一条唯一数据: DELETE FROM brand WHERE Id NOT IN (SELECT Id FROM (SELECT MIN(Id) AS Id FROM brand GROUP BY brandName) t) 在一个千万级的数据库查寻中,如何提高查询效率? 1 )数据库设计方面: a、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 b、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t

如何解决Oracle临时表空间过大

别等时光非礼了梦想. 提交于 2019-12-02 19:25:31
导读 解决Oracle临时表空间过大有两种方法,方法一增加临时表空间的大小,方法二重建临时表空间,解决临时表空间过大的问题。。 方案一:增加临时表空间的大小 --1.临时表空间的使用情况题 SELECT D.tablespace_name, SPACE "SUM_SPACE(M)", blocks "SUM_BLOCKS", used_space "USED_SPACE(M)", Round(Nvl(used_space, 0) / SPACE * 100, 2) "USED_RATE(%)", SPACE - used_space "FREE_SPACE(M)" FROM (SELECT tablespace_name, Round(SUM(bytes) / (1024 * 1024), 2) SPACE, SUM(blocks) BLOCKS FROM dba_temp_files GROUP BY tablespace_name) D, (SELECT tablespace, Round(SUM(blocks * 8192) / (1024 * 1024), 2) USED_SPACE FROM v$sort_usage GROUP BY tablespace) F WHERE D.tablespace_name = F.tablespace(+) AND D

Java开发数据库设计的14个技巧,你知道几个?

我是研究僧i 提交于 2019-12-02 16:33:02
1. 原始单据与实体之间的关系 可以是一对一、一对多、多对多的关系。在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体。在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证对应多个实体,或多张原始单证对应一个实体。 这里的实体可以理解为基本表。明确这种对应关系后,对我们设计录入界面大有好处。 〖例1〗:一份员工履历资料,在人力资源信息系统中,就对应三个基本表:员工基本情况表、社会关系表、工作简历表。这就是“一张原始单证对应多个实体”的典型例子。 2. 主键与外键 一般而言,一个实体不能既无主键又无外键。在E—R 图中, 处于叶子部位的实体, 可以定义主键,也可以不定义主键(因为它无子孙), 但必须要有外键(因为它有父亲)。 主键与外键的设计,在全局数据库的设计中,占有重要地位。当全局数据库的设计完成以后,有个美国数据库设计专家说:“键,到处都是键,除了键之外,什么也没有”,这就是他的数据库设计经验之谈,也反映了他对信息系统核心(数据模型)的高度抽象思想。 因为:主键是实体的高度抽象,主键与外键的配对,表示实体之间的连接。 3. 基本表的性质 基本表与中间表、临时表不同,因为它具有如下四个特性: 原子性。基本表中的字段是不可再分解的。 原始性。基本表中的记录是原始数据(基础数据)的记录。 演绎性。由基本表与代码表中的数据,可以派生出所有的输出数据。 稳定性