SQL
文章平均质量分 71
caomiao2006
这个作者很懒,什么都没留下…
展开
-
sql查询重复记录、删除重复记录方法大全
查找所有重复标题的记录:SELECT *FROM t_info aWHERE ((SELECT COUNT(*)FROM t_infoWHERE Title = a.Title) > 1)ORDER BY Title DESC一。查找重复记录1。查找全部重复记录Select * From 表 Where 重复字段 In (Select 重复字段转载 2014-08-28 23:11:45 · 564 阅读 · 0 评论 -
视图对性能的影响
Performance Implications of Views许多人都不认为视图可以改进性能,但是它确实可以提高性能,也可以用它来支持其他提高性能的方式。例如,利用视图重构数据库架构的某一阶段,可以在更改它访问的表的同时,使代码继续工作。一些应用程序为每一个用户使用一个表,这通常是为了实现行级别安全性。一个和前面例子类似的视图能够在表内实现类似的安全性,并且打开表的次数会更少,转载 2016-08-02 23:16:01 · 18268 阅读 · 0 评论 -
sql优化--in和exists效率
in 和existsin是把外表和内表作hash 连接,而exists 是对外表作loop 循环,每次loop 循环再对内表进行查询。一直以来认为exists 比in 效率高的说法是不准确的。如果查询的两个表大小相当,那么用in 和exists 差别不大。 如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:例如:表A转载 2016-08-02 23:57:31 · 15239 阅读 · 1 评论 -
EXISTS、IN与JOIN性能分析
EXISTS、IN与JOIN,都可以用来实现形如“查询A表中在(或不在)B表中的记录”的查询逻辑。在论坛上看到很多人对此有所误解(如关于in的疑惑、用 外连接 和 Is Null 代替 not in两帖),特做一简单测试。测试结果:测试代码较长,附于本帖最后。图表中百分数表示同一组3个查询的执行时间比例。红色表示3个语句中最慢,绿色表示3个语句中最快的,并列则没加颜色。转载 2016-08-03 00:19:25 · 13298 阅读 · 3 评论 -
SQL compute by 的使用
GROUP BY子句有个缺点,就是返回的结果集中只有合计数据,而没有原始的详细记录。如果想在SQL SERVER中完成这项工作,可以使用COMPUTE BY子句。COMPTE生成合计作为附加的汇总列出现在结果集的最后。当与BY一起使用时,COMPUTE 子句在结果集内生成控制中断和分类汇总。下列 SELECT 语句使用简单 COMPUTE 子句生成 titles 表中 price 及 ad转载 2016-08-07 05:30:59 · 1418 阅读 · 0 评论 -
DISTINCT和GROUP BY的区别
其实二者没有什么可比性,但是对于不包含聚集函数的GROUP BY操作来说,和DISTINCT操作是等价的。不过虽然二者的结果是一样的,但是二者的执行计划并不相同。在Oracle9i中:SQL> SELECT * FROM V$VERSION;BANNER-------------------------------------------------转载 2016-08-07 22:35:09 · 1184 阅读 · 5 评论 -
MySQL中distinct和group by性能比较[转]
之前看了网上的一些测试,感觉不是很准确,今天亲自测试了一番。得出了结论(仅在个人计算机上测试,可能不全面,仅供参考)测试过程:准备一张测试表 1 CREATE TABLE `test_test` (2 `id` int(11) NOT NULL auto_increment,3 `num` int(11) NOT NULL default '0转载 2016-08-07 22:38:14 · 2224 阅读 · 3 评论 -
sql执行顺序
SQL 不同于与其他编程语言的最明显特征是处理代码的顺序。在大数编程语言中,代码按编码顺序被处理,但是在SQL语言中,第一个被处理的子句是FROM子句,尽管SELECT语句第一个出现,但是几乎总是最后被处理。 每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入。这些虚拟表对调用者(客户端应用程序或者外部查询)不可用。只是最后一步生成的表才会返回 给调用者。如果没有在查询中转载 2016-08-07 23:09:47 · 373 阅读 · 3 评论 -
sql解释执行顺序
在查询中逻辑查询和物理查询有着本质的区别,SQL不同于其它编程的最明显的特征就是处理代码的顺序,虽然总是最先写SELECT 但是几乎总在最后执行,那到底是怎么一个执行顺序呢 如下的sql查询语句执行顺序(1)from(3) join(2) on(4) where(5)group by(6) with (7)having(8)转载 2016-08-07 23:12:07 · 1257 阅读 · 4 评论 -
MySQL的语句执行顺序
MySQL的语句一共分为11步,如下图所标注的那样,最先执行的总是FROM操作,最后执行的是LIMIT操作。其中每一个操作都会产生一张虚拟的表,这个虚拟的表作为一个处理的输入,只是这些虚拟的表对用户来说是透明的,但是只有最后一个虚拟的表才会被作为结果返回。如果没有在语句中指定某一个子句,那么将会跳过相应的步骤。下面我们来具体分析一下查询处理的每一个阶段FORM: 对FROM转载 2016-08-07 23:13:05 · 407 阅读 · 4 评论 -
SQL中inner join、outer join和cross join的区别
对于SQL中inner join、outer join和cross join的区别很多人不知道,我也是别人问起,才查找资料看了下,跟自己之前的认识差不多,如果你使用join连表,缺陷的情况下是inner join,另外,开发中使用的left join和right join属于outer join,另外outer join还包括full join.下面我通过图标让大家认识它们的区别。现有两张转载 2016-09-17 16:21:39 · 1038 阅读 · 0 评论 -
索引合并和组合索引的比较
在教务系统补考子系统的开发过程中,安排考场的算法运算时间非常慢,需要32秒才能完成考场的分配。查找原因,由于需要在学生补考科目表里面进行查找数据——该表的数据目前已达200万条,所以算法的大部分时间都花在查找数据方面。为了解决以上问题,我们决定对数据表进行分析,创建合适的索引。在创建索引过程中,我们发现查询语句已经为查询列创建了索引,但是是为每个列单独创建的——SELECT * FRO转载 2016-08-14 15:20:38 · 1853 阅读 · 0 评论 -
复合索引和多个单列索引的效率比较
中文总结:multi column的索引与isolate的column索引,到底孰优孰劣?结论如下:对于具有2个用and连接条件的语句,且2个列之间的关联度较低的情况下,multi col index有一定优势。对于具有2个用and连接条件的语句,且2个列之间的关联度较高的情况下,multi col index有很大优势。对于具有2个用or连接条件的语句,isolate转载 2016-08-14 15:29:46 · 5958 阅读 · 0 评论 -
Mysql查询优化器
Mysql查询优化器本文的目的主要是通过告诉大家,查询优化器为我们做了那些工作,我们怎么做,才能使查询优化器对我们的sql进行优化,以及启示我们sql语句怎么写,才能更有效率。那么到底mysql到底能进行哪些优化那,下面通过以下几个方面来探讨一下:1 常量转化 它能够对sql语句中的常量进行转化,比如下面的表达式: WHERE col1 = col2转载 2016-08-14 15:31:18 · 1557 阅读 · 0 评论 -
MYSQL分页limit速度太慢优化方法
当一个表数据有几百万的数据时,分页的时候成了问题如 select * from table limit 0,10 这个没有问题 当 limit 200000,10 的时候数据读取就很慢,可以按照一下方法解决最近一个网站的服务器评论被人刷死,导致mysql数据库异常发生too many open connections引发的SQL语句 代码如下复制转载 2015-11-23 20:47:52 · 689 阅读 · 0 评论 -
group by和order by配合使用注意
对于sql server来说:GROUP BY和ORDER BY同时存在的情况是,ORDER BY对GROUP BY后的结果再进行排序的,所以ORDER BY后面的排序字段需要在SELECT里出现的,即ORDER BY 子句中的列必须包含在聚合函数或 GROUP BY 子句中。如:下面这个就是错的SQL code?1转载 2015-11-23 20:29:49 · 15822 阅读 · 0 评论 -
存储过程
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。中文名存储过程外文名转载 2015-05-17 22:04:54 · 849 阅读 · 0 评论 -
MySQL存储过程
14.1.1 创建存储过程MySQL中,创建存储过程的基本形式如下:CREATE PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body 其中,sp_name参数是存储过程的名称;proc_parameter表示存储过程的参数列表; characteristi转载 2015-05-17 22:06:02 · 505 阅读 · 0 评论 -
JAVA调用数据库存储过程
下面将举出JAVA对ORACLE数据库存储过程的调用 ConnUtils连接工具类:用来获取连接、释放资源package com.ljq.test;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.S转载 2015-05-17 22:25:18 · 747 阅读 · 0 评论 -
hibernate调用mysql存储过程
在mysql中创建两个存储过程,如下:1、根据id查找某条数据:1 CREATE PROCEDURE `findEmpById`(IN id INTEGER(11))2 begin3 select * from emp where empId=id;4 end;2、根据id查找某个字段,并返回1 CREATE PROCEDURE `getNa转载 2015-05-17 22:32:12 · 832 阅读 · 0 评论 -
MySQL存储过程调试工具-dbForge Studio for MySQL
对于某些存储过程很多且复杂的SQL的应用,在短时间内要使得所有MySQL存储过程和函数正常运行,那么如果能找到一个比较好的调试工具,就可以事半功倍, 这里介绍的是dbForge Studio for MySQL。1. 首先说明dbForge Studio for MySQL具有存储过程调试功能的版本是收费的,但有30天调用期,我想足以满足你的要求。2安装部分省略,直接官网下载安装,转载 2015-05-17 22:13:33 · 781 阅读 · 0 评论 -
PL/SQL如何调试Oracle存储过程
调试过程对找到一个存过的bug或错误是非常重要的,Oracle作为一款强大的商业数据库,其上面的存过少则10几行,多则上千行,免不了bug的存在,存过上千行的话,找bug也很费力,通过调试可以大大减轻这种负担。工具/原料PL\SQLOracle方法/步骤首先在PL/SQL的左侧资源栏中展开P转载 2015-05-17 22:22:24 · 3308 阅读 · 0 评论 -
hibernate 调用存储过程
笔者参考原文:http://www.iteye.com/topic/176032使用hibernate 调用存储过程。[java] view plaincopypublic class StuInfo { private int id; private String stuName; priv转载 2015-05-17 22:33:09 · 1127 阅读 · 0 评论 -
存储过程的优缺点
为什么要用存储过程几个去 IBM 面试的兄弟回来抱怨:去了好几个不同的 IBM 项目组,几乎每个面试官问到数据库的时候都要问用没用过存储过程,烦人不?大家去面的程序员,又不是 DBA,以前的项目都没有用到存储,不照样运行的好好的?存储过程真的那么重要吗,它到底有什么好处呢?笔者认为,存储过程说白了就是一堆 SQL 的合并。中间加了点逻辑控制。但是存储过程处理转载 2015-05-17 22:04:51 · 467 阅读 · 0 评论 -
SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
Insert是T-sql中常用语句,Insert INTO table(field1,field2,...) values(value1,value2,...)这种形式的在应用程序开发中必不可少。但我们在开发、测试过程中,经常会遇到需要表复制的情况,如将一个table1的数据的部分字段复制到table2中,或者将整个table1复制到table2中,这时候我们就要使用SELECT INTO 和 I转载 2015-07-27 23:07:35 · 345 阅读 · 0 评论 -
MySql避免重复插入记录(根据主键判重)
今天用python抓取数据入库需要避免重复数据插入,在网上找了一些方法:方案一:使用ignore关键字如果是用主键primary或者唯一索引unique区分了记录的唯一性,避免重复插入记录可以使用:insert ignore into table_name(email,phone,user_id) values('test9@163.com','99999','9999')转载 2015-07-27 23:13:58 · 9589 阅读 · 0 评论 -
MySQL 语句级避免重复插入—— Insert Select Not Exist
想要插入一条数据,要避免重复插入,又不想折腾两回数据库连接操作,可以参考如下办法。 Sql代码 INSERT INTO table(column1,column2,column3 ...columnN) SELECT value1,value2,value3 ...valueN FROM dual WHERE NOT EXISTS(转载 2015-07-27 23:08:49 · 4982 阅读 · 1 评论 -
mysql支持跨表delete删除多表记录
前几天写了Mysql跨表更新的一篇总结,今天我们看下跨表删除。 在Mysql4.0之后,mysql开始支持跨表delete。 Mysql可以在一个sql语句中同时删除多表记录,也可以根据多个表之间的关系来删除某一个表中的记录。 假定我们有两张表:Product表和ProductPrice表。前者存在Product的基本信息,后者存在Product的价格。 第一种跨表删除的方式是不用转载 2015-09-17 14:00:09 · 847 阅读 · 0 评论 -
Mysql跨表更新 多表update sql语句总结
假定我们有两张表,一张表为Product表存放产品信息,其中有产品价格列Price;另外一张表是ProductPrice表,我们要将ProductPrice表中的价格字段Price更新为Price表中价格字段的80%。 在Mysql中我们有几种手段可以做到这一点,一种是update table1 t1, table2 ts ...的方式: 复制代码代码如下:UPDATE p转载 2015-09-17 13:57:12 · 640 阅读 · 0 评论 -
高性能MySql设计之查询优化(limit优化)
1 介绍1.1 处理流程当MYSQL 收到一条查询请求时,会首先通过关键字对SQL语句进行解析,生成一颗“解析树”,然后预处理器会校验“解析树”是否合法(主要校验数据列和表明是否存在,别名是否有歧义等),当“解析树”被认为合法后,查询优化器会对这颗“解析树”进行优化,并确定它认为最完美的执行计划。 1.2 衡量标准MYSQL查询转载 2016-08-14 15:37:38 · 6853 阅读 · 1 评论