在MYSQL中,视图中增加了一个distinct导致执行计划不先走where 条件 [问题点数:400分]

Bbs1
本版专家分:38
结帖率 42.86%
Bbs5
本版专家分:3488
版主
Blank
榜眼 2009年 总版技术专家分年内排行榜第二
2005年 总版技术专家分年内排行榜第二
Blank
进士 2018年总版新获得的技术专家分排名前十
Blank
银牌 2009年7月 总版技术专家分月排行榜第二
2009年3月 总版技术专家分月排行榜第二
2009年1月 总版技术专家分月排行榜第二
2005年7月 总版技术专家分月排行榜第二
2005年5月 总版技术专家分月排行榜第二
2005年3月 总版技术专家分月排行榜第二
Blank
优秀版主 优秀小版主
2015年8月优秀小版主
2015年9月优秀小版主
2015年5月优秀小版主
2015年2月论坛优秀版主
Bbs2
本版专家分:145
Bbs10
本版专家分:105904
版主
Blank
红花 2017年6月 其他数据库开发大版内专家分月排行榜第一
2017年2月 其他数据库开发大版内专家分月排行榜第一
2013年11月 其他数据库开发大版内专家分月排行榜第一
2013年9月 其他数据库开发大版内专家分月排行榜第一
2013年2月 其他数据库开发大版内专家分月排行榜第一
Blank
黄花 2018年2月 其他数据库开发大版内专家分月排行榜第二
2018年1月 其他数据库开发大版内专家分月排行榜第二
2017年12月 其他数据库开发大版内专家分月排行榜第二
2017年11月 其他数据库开发大版内专家分月排行榜第二
2017年1月 其他数据库开发大版内专家分月排行榜第二
2014年8月 其他数据库开发大版内专家分月排行榜第二
2014年2月 其他数据库开发大版内专家分月排行榜第二
2014年1月 其他数据库开发大版内专家分月排行榜第二
2013年12月 其他数据库开发大版内专家分月排行榜第二
2013年10月 其他数据库开发大版内专家分月排行榜第二
2013年8月 其他数据库开发大版内专家分月排行榜第二
2013年5月 其他数据库开发大版内专家分月排行榜第二
2013年1月 其他数据库开发大版内专家分月排行榜第二
2012年8月 其他数据库开发大版内专家分月排行榜第二
2012年5月 其他数据库开发大版内专家分月排行榜第二
2012年4月 其他数据库开发大版内专家分月排行榜第二
2012年1月 其他数据库开发大版内专家分月排行榜第二
Blank
蓝花 2017年9月 其他数据库开发大版内专家分月排行榜第三
2017年7月 其他数据库开发大版内专家分月排行榜第三
2017年5月 其他数据库开发大版内专家分月排行榜第三
2017年3月 其他数据库开发大版内专家分月排行榜第三
2016年12月 其他数据库开发大版内专家分月排行榜第三
2014年11月 其他数据库开发大版内专家分月排行榜第三
2014年7月 其他数据库开发大版内专家分月排行榜第三
2014年6月 其他数据库开发大版内专家分月排行榜第三
2014年5月 其他数据库开发大版内专家分月排行榜第三
2013年7月 其他数据库开发大版内专家分月排行榜第三
2013年3月 其他数据库开发大版内专家分月排行榜第三
2012年7月 其他数据库开发大版内专家分月排行榜第三
2012年6月 其他数据库开发大版内专家分月排行榜第三
2011年12月 其他数据库开发大版内专家分月排行榜第三
Bbs1
本版专家分:38
Bbs1
本版专家分:38
Bbs2
本版专家分:320
为什么where条件中使用or索引不起作用?
为什么<em>where</em><em>条件</em>中使用or索引不起作用?<em>where</em><em>条件</em>中使用or,索引就会失效,会造成全表扫描    是误区 一,要求使用的所有字段,都必须建立索引。 二,数据量太少,制定<em>执行计划</em>时发现全表扫描比索引查找更快。 三,确保<em>mysql</em>版本5.0以上,且查询优化器开启了index_merge_union=on, 也就是变量optimizer_switch里存在index_mer
MySQLl数据量不一样,导致走不同的索引
1、测试环境:MySQL 5.7.17 2、测试表结构 1 2 3 4 5 6 7 8 9 10 11 <em>mysql</em>> show create table a; +-------+-------------------------------------------------------------------------------
where条件中出现了(不等于/多重范围)就一定不走索引了吗
今天朋友抛了<em>一个</em>群里的讨论给我,如下图 这题我选择了A,B,因为我认为A和B都不满足最左;最后朋友实际建表的测试结果如下(也就是说答案应该是A,B,D) 按理说不等于不走索引应该是SQL优化的常识了,为什么我在选择的时候排除了D呢?因为2个月前我遇到了这样<em>一个</em>语句SELECT MAX(id) FROM a WHERE user_id !...
列中有索引而执行计划不走索引的原因之一的验证
许多ORACLE开发人员对于当他们只检索很少量的行时优化器选择全表扫描而感到困惑,而没有意识到优化器考虑了表中列值的集簇因子。  下面这一段是Oracle 手册中关于CLUSTERING_FACTOR的说明: Indicates the amount of order of the rows in the table based on the values of the index
有些 where 条件导致索引无效
在查询中,WHERE <em>条件</em>也是<em>一个</em>比较重要的因素,尽量少并且是合理的 <em>where</em> <em>条件</em>是徆重要的,尽量在多个<em>条件</em>的时候,把会提取尽量少数据量的<em>条件</em>放在前 面,减少后<em>一个</em> <em>where</em> <em>条件</em>的查询时间。有些 <em>where</em> <em>条件</em>会<em>导致</em>索引无效:  1.<em>where</em> 子句的查询<em>条件</em>里有!=,MySQL 将无法使用索引。  2.<em>where</em> 子句使用了 Mysql 函数的时候,索引将无效,比如:selec...
MySQL中explain执行计划中额外信息字段(Extra)详解
SQL<em>执行计划</em>是经过优化器决策,产生的SQL在数据库内部执行的访问路径计划; 由如下语法得到:explain select col1,col2 from t1..; desc select col1,col2 from t1..;理解输出各个列的含义 id:每个select子句的标识id select_type:select语句的类型 table:当前表名 显示查询将访问的分区,如果你的查询是基于
ORA-01446: 无法使用distinct, group by 等子句从试图中选择rowid或采样
今天用 select * from (select p.*,rownum nu from (select t.* ,t.rowid  from product t order by t.productid) p <em>where</em> rownum1  这个语句来实现分页查询 出现这个错误 然后百度了下,发现是 语句里主查询中用了 * 号,而 * 号包含了rowid,而主查询的数据源是子查询,主
sql order by与索引之间的关系(where条件出现字段才有效)
ORDER BY 通常会有两种实现方法,<em>一个</em>是利用有序索引自动实现,也就是说利用有序索引的有序性就不再另做排序操作了。另<em>一个</em>是把结果选好之后再排序。 用有序索引这种,当然是最快的,不过有一些限制<em>条件</em>,来看下面的测试。 测试数据:student表有两个字段id ,sid ,id是主键。一共有20W条记录,id从1到200000,sid也是从1到200000的数据。 第一种情况 : or
mysql 中 in 一个值和多余一个执行计划不同导致的性能差异
         由于之前接触<em>mysql</em>比较少,现在工作环境<em>mysql</em>用的比较多些,对于做数据的我们来说,性能优化肯定是必不可少的,所以开了这个优化的分类。                第<em>一个</em>优化说一说<em>mysql</em>中in<em>一个</em>值和多余<em>一个</em>值得优化。                现状: -- 多余<em>一个</em>值 SELECT * FROM t1 JOIN t2 JOIN t3 WH...
PostgreSQL join where 条件不同 explain 执行计划的差别
explain select a.order_id, b.order_id from tbl_a a left join tbl_b b --(select t.order_id from tbl_b t <em>where</em> t.order_id= 'oid1')b on a.order_id = b.order_id <em>where</em> a.order_id = 'oid1' --b.order_id =
如何解决create view中Select where语句中含有中文不能生成视图记录的问题
在MySQL,我新建<em>一个</em>视图,命令如下:        create or replace view abc as select xmmc from project <em>where</em> xmmc like '%地铁%';        可生成视图abc,但select * from abc; 时会出现以下错误:        ERROR 1267 (HY000): Illegal mix of co
mysql的in会让索引失效吗?
<em>mysql</em>的in会让索引失效吗?不会! 看结果: <em>mysql</em>> desc select * from tb_province <em>where</em> name in ('lily3', 'lily2', 'lily1'); +----+-------------+-------------+------------+------+---------------+------+---------+------
不走索引原因
Oracle在执行<em>一个</em>SQL之前,首先要分析一下语句的<em>执行计划</em>,然后再按<em>执行计划</em>去执行。分析语句的<em>执行计划</em>的工作是由优化器(Optimizer)来完成的。不同的情况,一条SQL可能有多种<em>执行计划</em>,但在某一时点,一定只有一种<em>执行计划</em>是最优的,花费时间是最少的。相信你一定会用Pl/sql Developer、Toad等工具去看<em>一个</em>语句的<em>执行计划</em>,不过你可能对Rule、Choose、First ro
MySQL第二天--where条件查询、视图及函数
//把数据库导出到脚本文件 <em>mysql</em>dump -uroot -p1234 --databases abc > d:/a/abc.sql //--databases是需要两个--   Where子句: Select 字段 From 表名<em>where</em> <em>条件</em> and  <em>条件</em> or <em>条件</em>  Update tabletableName set .. Where <em>条件</em> Delete from ta
MySQL中where条件的执行分析
MySQL中<em>where</em><em>条件</em>的执行分析 1、问题描述 一条SQL,在数据库中是如何执行的呢?相信很多人都会对这个问题比较感兴趣。当然,要完整描述一条SQL在数据库中的生命周期,这是<em>一个</em>非常巨大的问题,涵盖了SQL的词法解析、语法解析、权限检查、查询优化、SQL执行等一系列的步骤,简短的篇幅是绝对无能为力的。因此,本文挑选了其中的部分内容,也是我一直都想写的
mysql有关视图的详细解释
什么是视图 (View) – 虚拟表 – 内容与真实的表相似,包含一系列带有名称的列和行数据。 – 视图并不在数据库中以存储的数据的形式存在。 – 行和列的数据来自定义视图时查询所引用的基表,并且在具体引用视图时动态生成。 – 更新视图的数据,就是更新基表的数据 – 更新基表数据,视图的数据也会跟着改变 视图优点 • 简单 – 使用视图的用户完全不需要关心视<em>图中</em>的数据是通过什么查询得到的...
图中使用ROWNUM要注意
昨天晚上帮人优化<em>一个</em>ebs的sql。sql
mysql order by 造成语句 执行计划中Using filesort,Using temporary相关语句的优化解决
<em>mysql</em>> explain  select permission.* from t_rbac_permission   permission  inner JOIN  t_rbac_acl  acl  on acl.PERMISSION_ID=permission.ID  <em>where</em>  permission.menu=1 and acl.PRINCIPAL_TYPE=0     order b
mysql中count(*),distinct的使用方法和效率研究
在处理<em>一个</em>大数据量数据库的时候 突然发现<em>mysql</em>对于count(*)的不同处理会造成不同的结果 比如执行 SELECT count(*) FROM tablename 即使对于千万级别的数据<em>mysql</em>也能非常迅速的返回结果 而对于 SELECT count(*) FROM tablename WHERE….. <em>mysql</em>的查询时间开始攀升 仔细查阅累下手册,发现当没有WH
mysql条件限制语句(二)like 全匹配 全模糊 distinct limit
可以看出双百分号%%是全匹配,可以匹配表中的所有记录。那么,即便是NULL值也能够匹配吗? 可以看出当作用于多列的时候<em>distinct</em>就不再返回唯一记录了。 另外<em>distinct</em>还可以和一些数学运算的函数一起使用:
MySQL使用索引优化DISTINCT操作
MySQL通常使用GROUPBY(本质上是排序动作)完成DISTINCT操作,如果DISTINCT操作和ORDERBY操作组合使用,通常会用到临时表.这样会影响性能. 在一些情况下,MySQL可以使用索引优化DISTINCT操作,但需要活学活用.本文涉及<em>一个</em>不能利用索引完成DISTINCT操作的实例. 实例1 使用索引优化DISTINCT操作 create table m11 (a int
ORACLE中where部分条件执行顺序测试
ORACLE中<em>where</em>部分<em>条件</em>执行顺序测试 实验1:证明oracle SQL的语法分析应该是从右到左的 实验2:证明了oracle SQL<em>条件</em>的执行是从右到左的 实验3:证明同<em>一个</em><em>where</em>子句中<em>条件</em>的先后顺序对效率影响不大
知其然(1) 无法使用 DISTINCT, GROUP BY 等子句从视图中选择 ROWID 或采样
select * from (SELECT ROWID, ROWNUM R,ENAME FROM EMP WHERE SAL>2000) <em>where</em> 3
mysql limit导致索引选择(选择的并不是最佳索引)的处理方案
昨天公司APP项目上线时遇到<em>一个</em>奇葩问题,在这里简单做<em>一个</em>记录,以避免如果再遇到类似问题再去花费时间寻找解决方案。 首先贴出cp_orders表中建立的索引 使用限制符limit时,<em>mysql</em>使用了idx_order_type索引,扫描了46w行 没有使用限制符limit时,<em>mysql</em>使用了idx_agent_order_type索引(联合索引),扫描了9k行 解决方案: 1...
oracle 执行计划为什么不走hash join?(转载)
今天,某省的同事来告诉我,表重组后,他用于统计的<em>一个</em>sql脚本运行变慢了,之前只需要17、8分钟能出来的结果,现在1小时40分钟左右才能出来结果。 我们一起来看看脚本中的<em>一个</em>sql: SQL&amp;gt; explain plan for  2  select a.startdate,b.subsid from tab_1 a,tab_2 b <em>where</em>   3  a.servid='025...
sql视图加where之后查询速度很慢-----sql优化(持续更新中)
select s.row_id,s.money  from v_school s <em>where</em> s.money&amp;gt;1000 (其中v_school是视图)这个查询很慢,一开始搞不懂为什么,后来发现s.money是在视图里面经过复杂运算得到的。 原因解释:因为v_school查出的每条数据,每次都会比较<em>where</em>后面的s.money&amp;gt;1000,而这个视图数据是百万级的,所以得比较上百万次复...
【MySQL】索引失效以及explain应对
        我们都知道在数据表中建立索引是可以增加查询的效率的,但是不知道同志们有没有注意过索引失效的情况,就是你明明建立了索引,但是却和没有建立索引的时候查询的时间是一样的。   前提          索引是什么?         MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。可以得到索引的本质:索引是数据结构。   使用Navicat...
MySQL执行计划顺序需要注意的地方
SQL<em>执行计划</em>顺序是:id如果相同,可以认为是一组,从上往下顺序执行;在所有组中,id值越大,优先级越高,越先执行。不过,对于标量子查询, 并非是id值越大,越先执行。如下面的<em>执行计划</em>顺序是: r(1)->o(1)->ds(1)->(icd(3)+d(2)) EXPLAIN SELECT ds . OPERATING_UNIT_CODE AS OPERATING_UNIT_CODE,
update的where条件把索引的字段要带上,要不然就全表锁
update的<em>where</em><em>条件</em>把索引的字段要带上,要不然就全表锁 文章目录update的<em>where</em><em>条件</em>把索引的字段要带上,要不然就全表锁本文主要内容背景在学习中总结一下内容关于锁的表sql加锁思考点InnoDB行锁实现方式 本文主要内容 报错了: java.sql.BatchUpdateException: Lock wait timeout exceeded; try restarting tra...
MongoDB索引使用注意事项、执行计划(explain)
一、Mongo使用索引注意事项 1、低效率查询     1)、$<em>where</em>和$exists完全不能走索引       首先$<em>where</em>是完全不能使用索引的,而$exists也是不可以使用稀疏索引进行查询,因为不存在的字段和值为null的存储方式是一样的,不能有效的过滤掉为null的字段。     2)、$ne取反操作效率很低       取反操作即使可以走索引也需要对全索引进行查询,否则...
查询条件加括号与不加括号区别
select ename, job, deptno  from emp <em>where</em> deptno in (10, 20)    and  (ename like '%I' or job like '%ER'); 执行该sql,结果集如下: 1        JONES        MANAGER        20 2        CLARK        MANAGER
mysql5.7在多列索引 in条件查询的优化
山谷中偶遇,分享出来。某日(ri),zabbix <em>mysql</em>慢日志监控发现很多陌生的慢查询。 大概如下:SELECT * FROM `entry_device` WHERE (`entry_no`, `device_udid`) IN (('464580908742086656', 'ffffffffdeaea5fcffffffff96fddfcf')), ('464109860674342912
mysql where执行顺序
<em>where</em>执行顺序是从左往右执行的,在数据量小的时候不用考虑,但数据量多的时候要考虑<em>条件</em>的先后顺序,此时应遵守<em>一个</em>原则:排除越多的<em>条件</em>放在第<em>一个</em>。在用MySQL查询数据库的时候,连接了很多个过滤<em>条件</em>,发现非常慢。例如:SELECT … WHERE p.languages_id=1 AND t.type=1 AND p.products_id IN (472,474),这样查询需要20多秒,虽然在各...
MySQL-数据库表数据查询基础(DISTINCT、WHERE)
SELECT 语句:SELECT 语句用于从数据库中选取数据。结果被存储在<em>一个</em>结果表中,称为结果集。DISTINCT:在表中,<em>一个</em>列可能会包含多个重复值,DISTINCT 关键词用于返回唯一不同的值。SELECT DISTINCT column_name,column_name FROM table_name;WHERE:WHERE 子句用于提取那些满足指定标准的记录。SELECT column_...
MySQL - ON & WHERE 条件区别和执行顺序
一、案例 数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。 在使用left jion时,on和<em>where</em><em>条件</em>的区别如下: 1、 on<em>条件</em>是在生成临时表时使用的<em>条件</em>,它不管on中的<em>条件</em>是否为真,都会返回左边表中的记录。 2、<em>where</em><em>条件</em>是在临时表生成好后,再对临时表进行过滤的<em>条件</em>。这时已经没有left join的含义(必须返回左边表的记录)...
MySQL中distinct与group by之间的性能进行比较
最近在网上看到了一些测试,感觉不是很准确,今天亲自测试了一番。得出了结论,测试过程在个人计算机上,可能不够全面,仅供参考。 测试过程: 准备一张测试表  ? 1 2 3 4 5 CREATE TABLE `test_test` (   `id` int(11) NOT NULL
mysql索引 mysql中select 查询条件随谈
<em>mysql</em>索引 使用索引—编写代码时候尽可能利用索引,不过非常小的表除外。因为表小,忽略表中索引能使表的读取更为高效。 什么是索引 数据库中的索引是某个表中一列或多列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。 创建索引语法:    create [索引类型] index 索引名称 on 表名(列名) [with fill factor = 填充因子值0-100]
mysqlwhere表达式
在学习过<em>mysql</em>的<em>where</em> <em>条件</em>后,做个总结。(不对之处欢迎指正) 操作数据库的时候,有时候只要操作一些有<em>条件</em>限制的数据,这时可以在SQL语句中添加WHERE子句来规定数据操作的<em>条件</em>。 建立数据表table1: 1."=":等于,完全匹配<em>条件</em>。 例如:查找表中name为abc的数据,SELECT * FROM `table1` WHERE name = 'abc'; 运行结果
MySQL explain执行计划解读,索引的建立
本文我们主要介绍了MySQL性能分析以及explain的使用,包括:组合索引、慢查询分析、MYISAM和INNODB的锁定、MYSQL的事务配置项等,希望能够对您有所帮助。 1.使用explain语句去查看分析结果  如explain select * from test1 <em>where</em> id=1;会出现:id selecttype table type possible_keys key
mysql 联合索引生效的条件、索引失效的条件
1.联合索引失效的<em>条件</em> 联合索引又叫复合索引。两个或更多个列上的索引被称作复合索引。   对于复合索引:Mysql从左到右的使用索引中的字段,<em>一个</em>查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c)。 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。       利用索...
mysql索引失效的几种情况(总结)
索引并不是时时都会生效的,比如以下几种情况,将<em>导致</em>索引失效:     1.如果<em>条件</em>中有or,即使其中有<em>条件</em>带索引也不会使用(这也是为什么尽量少用or的原因)   注意:要想使用or,又想让索引生效,只能将or<em>条件</em>中的每个列都加上索引   2.对于多列索引,不是使用的第一部分,则不会使用索引   3.like查询是以%开头     4.如果列类型是字符串,那一定要在<em>条件</em>中将数据使用
mysq order by 不走索引问题
问题描述 今天遇到<em>一个</em>问题,在<em>一个</em>报表导出的功能中,需要导出用户的某些记录的所有数据,有些用户有多达10万的记录,导出过程非常慢,需要10多秒。经过排查,发现是查询数据库的时候的问题,查询数据居然用了7秒左右。起初看到sql没发现什么问,sql写得中规中矩,只查询需要的列,使用索引,遵循索引规则等等,但是他就是要那么长时间。 问题分析 表面上看不出问题,那只能用explain大法来分析分析了, 原...
mybatis查询sql:where语句“查询时间字段书写问题”引发的索引失效
今天碰巧看到了网友的《Oracle date和timestamp类型混用时需要注意的索引失效问题》这篇文章,2年前遇到了类似问题,很有同感,特此转载。   我当时的遇到问题的场景: 前提: Oracle数据库字段trade_time类型为DATE mybatis 调整前: beginDate为java.util.Date类型 mybatis查询sql中<em>where</em><em>条件</em>写法:t
SQL2000视图中关联与where子句中条件判断的结果有所区别
SQL2000在创建视图时,部分写在<em>where</em>子句中的<em>条件</em>在保存时会自动调整到关联子句中,该动作会导至查询结果不正确。 当前例子的查询结果应为空,但运行后有一条记录。 双击视图进行修改,将<em>条件</em>放到<em>where</em>子句中,再次运行,结果正确。 原因未查明。待高手解惑。
mysql查询条件失效问题
select recordId, employeeId,startTime,endTime  from `kq_absent_register` as ar  <em>where</em> ar.employeeId = 75  and "2017-07-05" and "2017-07-05" >= DATE_FORMAT(ar.endTime,'%Y-%m-%d')  and ar.type = 1
Mysql怎么样避免全表扫描,sql查询优化
对查询进行优化,应尽量避免全表扫描,首先应考虑在 <em>where</em> 及 order by 涉及的列上建立索引:  尝试下面的技巧以避免优化器错选了表扫描:   使用ANALYZE TABLE tbl_name为扫描的表更新关键字分布。 对扫描的表使用FORCE INDEX告知MySQL,相对于使用给定的索引表扫描将非常耗时。 SELECT * FROM t1, t2 FORCE INDEX (
mysql explain执行计划详解(查看索引执行)
1)、id列数字越大越先执行,如果说数字一样大,那么就从上往下依次执行,id列为null的就表是这是<em>一个</em>结果集,不需要使用它来进行查询。   2)、select_type列常见的有: A:simple:表示不需要union操作或者不包含子查询的简单select查询。有连接查询时,外层的查询为simple,且只有<em>一个</em> B:primary:<em>一个</em>需要union操作或者含有子查询的
mysql where 条件语句中的OR和AND的用法注意!
在<em>mysql</em>中,在进行数据库的增删改查时,经常会遇到这样的情况,在写<em>条件</em>语句<em>where</em>时,可能会同时有多个<em>条件</em>的“或”或者“与”,但用法不当经常会达不到效果,经过尝试,本人发现<em>一个</em><em>where</em>语句中同时出现<em>条件</em>的“与”或者“或的时候”,要将多个OR用小括号括起来再和AND进行“与”,或者将多个AND用小括号括起来再与OR进行“或”。
Linq实现In条件和Distinct效果
In写法: arrayDictype:int数组 db.GetQuery().Where(a => arrayDictype.Contains(a.DicType)).ToList();  下面是Distinct(转载的): Person1: Id=1, Name="Test1" Person2: Id=1, Name="Test1
Mysql执行计划-Extra列解析
Mysql的<em>执行计划</em>中,其他的列都比较好理解,唯独这个Extra列,总是看得有点让人似懂非懂,先终于找了个机会自己研究了下。 using index: 中文名叫做索引覆盖查询: 如果查询的时候,用到了索引,并且你最终需要的数据也是这个索引的一部分,那么就出现using index. 例如: user表有索引 key(id), key(name) select id...
mysqldistinct的用法(不重复记录)
<em>distinct</em>这个关键字用来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是<em>distinct</em>只有用二重循环查询来解决,而这样对于<em>一个</em>数据量非常大的站来说,无疑是会直接影响到效率的。 下面先来看看例子: table表 字段1     字段2    id        name    1           a
关于 where条件下加了子查询 导致速度巨慢的解决方案
问题源自<em>一个</em>sql代码 select count(1) &quot;rwsl&quot;, count(decode(xx.FPSJ,null,null,1)) &quot;fpsl&quot;, count(decode(xx.HSSJ,null,null,1)) &quot;fksl&quot;, count(decode(mx.NEXT_CLHJ,'HSJGCH',1,null)) &quot;hsjgch&quot;, count(...
mysqlwhere子句不区分大小写
如题,<em>mysql</em>中的<em>where</em>子句在遇到字符串时不区分大小写。 因此,假设表中有两条记录的UserName分别为‘janet’和‘Janet’,如果执行以下语句: update table set UserEmail='123@qq.com' <em>where</em> UserName='janet'; 此时我们只想改变‘janet’的邮箱,却不小心把‘Janet’的邮箱也更改了。 解决办法就是使用bi...
Mysql多表连接查询的执行细节(二)
本篇博客会说明一下问题: 1. 筛选<em>条件</em>放置在<em>where</em>和on上的不同; 2. 外连接时外表是否一定为驱动表; 3. 是否应该使用join连接查询
mysql优化,导致查询不走索引的原因总结
最近公司让我做SQL优化的工作,用explain发了一些问题。常见的像OR ,IN,>= ,或者是嵌套等<em>导致</em>索引失效,<em>导致</em>查询性能降低的问题在这里就不做陈述了,网上的文章一搜一 大片。我只是写点个人工作中遇到的,网上不好搜索的,但是不保证所有的场景都试用,后续我还会更新。 1、order by 和 limit 结合使用,如果<em>where</em> 字段,order by字段都是索引,那么有limit索引会使
mysql 使用 distinct关键字有多个字段时不起作用
select <em>distinct</em> name from table 得到的结果是:    name    a    b    c
一个执行计划异常变更的案例 - 外传之绑定变量窥探
上一篇文章《<em>一个</em><em>执行计划</em>异常变更的案例 - 前传》(http://blog.csdn.net/bisal/article/details/53750586),介绍了一次<em>执行计划</em>异常变更的案例现象,这两天经过运行同事,以及罗大师的介绍,基本了解了其中的原因和处理方法,这个案例其实比较典型,涉及的知识点很多,有数据库新特性,有SQL相关的,还有应用数据质量问题,对于大师来说,是信手拈来的一次问题排查和
SQL条件中“is null”谓词导致全表扫描问题优化
SQL<em>条件</em>中“is null”谓词<em>导致</em>全表扫描问题优化 摘要:SQL,索引,is null,优化 正文:        前段时间针对相关SQL进行了优化,零散记录了下优化过程,这次整理出来与大家分享。若有描述不当或补充的地方请留言,谢谢! 方法1:用固定值建复合索引优化             1)新建测试表             create tab
postgresql-常用的查询条件
常用的查询<em>条件</em> 查询<em>条件</em> 谓词 比较 &amp;gt;,&amp;lt;,&amp;gt;=,&amp;lt;=,!=,&amp;lt;&amp;gt;,!&amp;gt;,!&amp;lt;,=,not+上述比较符,any/all+上述比较符 确定范围 between and ,not between and 确定集合 in,not in 字符匹配 like,not like 空值 is null,i...
避免写出不走索引的SQL, MySQL
在MySQL中,并不是你建立了索引,并且你在SQL中使用到了该列,MySQL就肯定会使用到那些索引的,有一些情况很可能在你不知不觉中,你就“成功的避开了”MySQL的所有索引。 现假设有t_stu表,age,sname上建立了索引 索引列参与计算 如果<em>where</em><em>条件</em>中age列中使用了计算,则不会使用该索引 SELECT `sname` FROM `t_stu
mysql 联合索引> 和 order by 不走 索引 慎用
我有<em>一个</em>联合索引idx_css(createddate,storeId,site) EXPLAIN SELECT * FROM statis_domain AS a WHERE a.`createddate` > '2015-04-23' AND a.`storeId` = 0 现有以上sql语句,竟然用不到联合索引。 解决办法:1、createddate>'time1' and cre
MySQL SQL 多个Join on(表连接) 和Where间的执行顺序(nest loop join机制)【转】
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_27529917/article/details/78447882 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_27529917/article/details/78447882 ...
通过复合索引来避免is null使索引失效!
由于oracle索引的特性,使得is null这种<em>条件</em>的sql不能够使用索引。但是我们可以通过复合索引的形式来使这种sql也能使用索引,下面是<em>一个</em>简单的测试: SQL> create table t as select * from dba_objects; 表已创建。 SQL> create index idx_t_id1 on t(object_id); 索引已创建。 SQL
mysql order by过程解析,排序与索引,联合索引中的范围查询,大量数据带条件的分页
一条SQL的执行实际上可以分为三步。 1.得到数据 利用 <em>where</em> <em>条件</em> 2.处理数据 3.返回处理后的数据 比如语句: select city,name,age from t <em>where</em> city='杭州' order by name limit 1000,100; 第一步:根据<em>where</em><em>条件</em>和统计信息生成<em>执行计划</em>,得到数据。 第二步:将得到的数据排序。 当...
Mysql 关联查询得where条件
通常,关联查询时候,把<em>where</em>放在关联<em>条件</em>on之后。但是数据量比较大的时候,有时候性能很低。 如果可以把<em>where</em>放在内表里,尽量放在内表里,尤其是主表里,大数据量的时候可以提高很多查询时间。
mysql 不走索引的情形
<em>mysql</em> 不走索引的情形: 1. null 值判断; 2. != , &amp;lt;&amp;gt; 操作符; 3. or(大多数情况下); 4. in(大多数情况下); 5. like的使用(大多数情况下); 6. <em>where</em> 子句中对字段进行表达式操作,eg: select id from t <em>where</em> num/2=100 ; 7. 在 <em>where</em> 子句中对字段进行函数操作 8. 在 ...
通过重新生成执行计划解决绑定变量执行计划偏差导致SQL执行时间过长
基本要素(时间、用户、问题)      用户11g环境下有段SQL语句在程序中执行效率非常差,但是在plsql中执行却很快,通过查看<em>执行计划</em>,发现使用了不同的索引<em>导致</em>,程序中执行的如下: PLSQL中执行的效果如下: 可以看到差别,使用门诊费用记录_IX_登记时间索引是在plsql中的<em>执行计划</em>,使用门诊费用记录_UQ_NO的是程序中的<em>执行计划</em>,两者SQL是完全
mysql使用exists进行查询
参考:http://blog.csdn.net/gucapg/article/details/16839587   1、exists的返回结果是bool型,只有true或者false 如 SELECT * FROM alumni_info t WHERE EXISTS(SELECT a_id FROM alumni_education e WHERE e.a_id='6588' ),
mysql where 条件语句中的OR和AND的用法注意!
在<em>mysql</em>中,在进行数据库的增删改查时,经常会遇到这样的情况,在写<em>条件</em>语句<em>where</em>时,可能会同时有多个<em>条件</em>的“或”或者“与”,但用法不当经常会达不到效果,经过尝试,本人发现<em>一个</em><em>where</em>语句中同时出现<em>条件</em>的“与”或者“或的时候”,要将多个OR用小括号括起来再和AND进行“与”,或者将多个AND用小括号括起来再与OR进行“或”。
Informix SQL 语句性能调优最佳实践
SQL <em>执行计划</em> 关于<em>执行计划</em>,我们可以把它简单的理解成 SQL 语句执行时访问数据的方式。<em>执行计划</em>的优劣是影响 SQL 执行效率的重要因素。它包括:查询优化器认为最优的数据访问路径,返回记录数的估计值,SQL 的相对开销值,以及其他附属信息。 获取<em>执行计划</em> 获取<em>执行计划</em>有多种方式: 1. 在服务器上直接执行 SQL 语句 set explain on 得到当前 session 中 SQL
oracle间断性走错执行计划
案例: 存储过程:sp_odm_ln_ar_smy INSERT INTO odm_ln_ar_smy (biz_dil_nbr, --业务借据编号 acg_sbj_id, --账户科目号 biz_tp_cd, --业务类型代码 ......省略部分内容 block_f, --冻结标识 usable_amt, -
where条件的顺序是否影响mysql的执行效率
<em>where</em><em>条件</em>的顺序,<em>where</em><em>条件</em>的复合索引的顺序,会不会影响效率 复合索引 explain SELECT * FROM `demo` <em>where</em> username=’ss’ and age=42 explain SELECT * FROM `demo` <em>where</em> age=42 and username=’ss’ 可以从上面的结果看到,两个查询都使用到了username1这个复合索引 单列
mysql视图不允许更新的条件
转自 http://blog.sina.com.cn/s/blog_4f9fc6e10102w0um.html 1. 若视图是由两个以上基本表导出的,则此视图不允许更新。 2. 若视图的字段来自字段表达式或常数,则不允许对此视图执行INSERT和UPDATE操作,但允许执行DELETE操作。 3. 若视图的字段来自集函数,则此视图不允许更新。 4. 若视图定义中含有GROUP
MySQL优化--where条件字段的顺序对效率的影响 (02)
学生表 Student id(编号) name(名字) age(年龄) height(身高) 1 Tommy 26 170 2 Jerry 23 180 3 Frank 30 160          如表所示,这里只是呈现了3条数
mysql关于or前后条件的索引问题
        不是说,一条sql语句只能用<em>一个</em>索引么?但如下这样一条sql语句 SELECT * FROM `comment` WHERE `toconuid` = '10' or `tocomuid` = '10'         其中toconuid列和tocomuid列分别为单列索引,explain后显示两个索引都用了,extra为 Using union(toconuid,toc...
Where语句设置不当导致索引失效
虽然说索引在使用上可能有种种限制,但是还是在数据库设计中被充分利用。因为在大部分情况下索引还是被用来提高数据库性能的<em>一个</em>工具。不过有些数据库工程师往往会犯一些低级的错误,<em>导致</em>索引失效。如在Where<em>条件</em>子句中设置了不合适的<em>条件</em>,从而在查询等操作时<em>导致</em>原先在表中设置的索引不起作用。笔者以前也多次犯过类似的错误。笔者今天在这里就抛砖引玉,把这些常见的问题总结一下。希望后来的人能够尽量少犯这些错误。
mysql中三种方式使用where条件
<em>mysql</em>中三种方式使用<em>where</em><em>条件</em> >> <em>mysql</em>中三种方式使用<em>where</em><em>条件</em>,由好到坏: 在索引中使用<em>where</em><em>条件</em>过滤不匹配的记录,这是在存储引擎层完成的 使用索引覆盖挺扫描(在Extra列中出现了Using index)来返回记录,直接从索引中过滤不需要的记录返回命中的结果。这是 在<em>mysql</em>服务器层完成的,但无需再回表查询记录 从数据表中返回数据,然后过滤不满足<em>条件</em>记录(在E
造成mysql全表扫描的原因
全表扫描是数据库搜寻表的每一条记录的过程,直到所有符合给定<em>条件</em>的记录返回为止。通常在数据库中,对无索引的表进行查询一般称为全表扫描;然而有时候我们即便添加了索引,但当我们的SQL语句写的不合理的时候也会造成全表扫描。 以下是经常会造成全表扫描的SQL语句及应对措施: 1. 使用null做为判断<em>条件</em> 如:select account from member <em>where</em> nicknam
Mybatis的Date类型不走索引的问题
该问题出现在ORACLE 数据库,其他数据库没有试过。 如果JAVA中的属性为DATE,而数据库中是DATE类型的话。mybatis会默认将JAVA中DATE属性映射到数据库的 Timestamp类型。这时就会有这样的查询 where create_time &amp;gt;= v_time 左边为DATE右边为Timestamp.类型不一致,ORACLE会隐式将小的转成大的。 也就是变成这...
数据库复习笔记——SELECT 大全
SELECT 语句的一般格式: SELECT [ALL|DISTINCT] [别名][, [别名]] ... FROM [别名] [, [别名]]... | (select 语句>) [AS] [WHERE ] [GROUP BY 1> [HAVING ]] [ORDER BY 2> [ASC | DESC]]; 1. 目标列表达式的可选格式
mysql的order by与where加了索引与没有加索引的结果集区别
CREATE TABLE employees ( emp_no INT(11) NOT NULL, birth_date DATE NOT NULL, first_name VARCHAR(14) NOT NULL, last_name VARCHAR(16) NOT NULL, gender ENUM(‘M’,’F’) NOT NULL,
MYSQL_视图与索引
视图(view): 视图的分类: 索引(Index): 视图(view): 表的一部分投影,也是数据库里的<em>一个</em>对象。(表的虚拟部分) 如何创建视图? 格式: create view viewName as subQuery --创建<em>一个</em>表emp的deptno为10的视图 create view view_emp_deptno_1...
执行计划的access和filter的区别
一、简要说明:     Prediceate(谓词):<em>一个</em>查询中的WHERE限制<em>条件</em>。     在查看<em>执行计划</em>的信息中,经常会看到两个谓词filter和access,它们的区别是什么,理解了这个两个词对我们解读Oracle的<em>执行计划</em>信息会有所帮助。     简单地说,<em>执行计划</em>如果显示是access,就表示这个谓词<em>条件</em>的值将会影响数据的访问路径(表还是索引),而filter表示谓词<em>条件</em>的值并不
hive高阶1--sql和hive语句执行顺序、explain查看执行计划、group by生成MR
hive语句执行顺序msyql语句执行顺序代码写的顺序:select ... from... <em>where</em>.... group by... having... order by.. 或者 from ... select ... 代码的执行顺序:from... <em>where</em>...group by... having.... select ... order by... hive 语句执行顺序大致
mysql实现distinct限制一列而查多列的方法
假设有表: id name 1 a 2 b 3 c 4 c 5 b我想用一条语句查询得到name不重复的所有数据,如下: select <em>distinct</em> name from table ---------- name a
能否向Mysql视图中插入/更新/删除数据
原文链接:http://blog.sina.com.cn/s/blog_8edc37a80101c4ba.html 要通过视图更新基本表数据,必须保证视图是可更新视图,即可以在INSET、UPDATE或DELETE等语句当中使用它们。对于可更新的视图,在视<em>图中</em>的行和基表中的行之间必须具有一对一的关系。还有一些特定的其他结构,这类结构会使得视图不可更新。   如果视图包含下述结构中的任何一种,
Where条件的in里面放太多数据导致很慢
比如:select * from TableA <em>where</em> ID in (42,216,219,230,231,220,249,250,221,251,252,217,253,255,256,254,257,258,1804) 52W数据,查询速度19386ms,好慢怎么办?程序都卡死了。   那么试一下百度搜索到的优化方式? 1.将in里面的ID分拆查询,再合并数据 select
mysql条件限制语句(一)where in and
显然<em>where</em>的功能要比in强大得多,因此<em>where</em>的命令优先级也比高一些。而相同<em>条件</em>下<em>where</em>的搜寻范围也比in要大一点---毕竟功能多了,要搜寻的东西就多了。所以,相同的查询<em>条件</em>下<em>where</em>的效率会比in稍微差一点点,当然也仅仅是一点点而已。当然由于in的命令优先级较<em>where</em>低,所以用in的话SQL语句也更容易报错。
mysql 联合索引 in查询是否生效
这篇文章主要讲的是使用in查询,联合索引是否会生效的问题 首先简单说一下联合索引:联合索引又叫复合索引,是由表中的几个列联合组成的索引。联合索引生效需满足最左前缀原则,即如果联合索引列为a,b,c三列,a,b,c 、a,b 、a生效,b,c、a,c、b、c等不生效(此处的顺序不是<em>where</em><em>条件</em>后面的先后顺序,而是<em>where</em><em>条件</em>中是否存在这些列,如果<em>where</em>中只存在a,c列,...
MySQL存储过程where条件执行失败的问题
前几天对服务器实体做了属性缓存机制,当时测试也没有出现大的问题,昨天有人跟我说,登陆的时候角色等级显示错误,我复测了一下,发现不只是等级错误,进入游戏后角色位置、金钱、经验等数据都错了。         跟踪了半小时,发现是数据库的数据出错了,玩家下线保存角色数据的时候,居然将数据库内所有角色的数据都改了,然后赶紧去看存储过程,但是看不出存储过程的错误。先贴一下存储过程的实现: CREATE
left join 或right join 加上where条件后连接失效,等同于inner join
原因:<em>where</em>是先连接然后再筛选 举例:表1:  表2:查询语句:select * from tab1 left JOIN tab2  on (tab2.id=tab1.id) <em>where</em> tab2.hobby = &quot;游泳&quot;;结果:过程:先生成中间表:再<em>where</em> <em>条件</em>过滤。     所以left join 失效。解决办法:将<em>where</em> 换成and 即:查询语句:select * from ta...
Mysql -- 执行计划介绍
一、序言        作为程序员,难免要和数据库打交道,一般情况下,我们不是DBA ,但是又要写很多SQL,因此SQL效率就成了很大的问题。关于SQL效率优化,除了要掌握一定优化技巧外, 还得有很多经验的积累,但是这里我们可以通过<em>执行计划</em>对SQL进行分析,能快速找到优化的地方,这是一种很不错的方式,介绍给大家,大部分我是翻译而来,原文地址:http://dev.<em>mysql</em>.com/doc/r...
mysql创建视图包含子查询的解决方法
<em>mysql</em> 创建视图出现1349 View's SELECT contains a subquery in the FROM clause解决办法 习惯用oracle创建视图,最近在<em>mysql</em>下创建视图出现以下错误: 查询:CREATE or replace VIEW view_order_summary AS select a.opuser,a.audit_status,a.tota
MySQL数据去重--distinct的使用
一般情况下,我们会用<em>distinct</em>去除查询的到结果的重复记录,但是<em>distinct</em>只能返回它的目标字段,而无法返回其它字段。 下面先来看看例子:      table    id  name    1    a    2    b    3    c    4    c    5    b select<em>distinct</em> name from table得到的结果是:    name    ...
Android快速入门下载
这是前段时间用于公司Android入门培训的资料,学习Android三周时间收集整理的,时间仓促,希望能对像我这样还没入门就直接上项目的人一点帮助 :) 相关下载链接:[url=//download.csdn.net/download/over1400/2729442?utm_source=bbsseo]//download.csdn.net/download/over1400/2729442?utm_source=bbsseo[/url]
最全淘宝网金冠店铺名单电子书2010年版下载
2010年最新淘宝网金冠店铺名单电子书,本书收集最新最全面的淘宝网顶级信用级别卖家,让您更快捷的购物。 相关下载链接:[url=//download.csdn.net/download/tbjgdp/2096251?utm_source=bbsseo]//download.csdn.net/download/tbjgdp/2096251?utm_source=bbsseo[/url]
网络工程师考试同步辅导下载
国家人力资源和社会保障部 工业和信息化部 主办 全国计算机技术与软件专业技术资格考试办公室 承办 全国计算机技术与软件专业技术资格(水平)考试 相关下载链接:[url=//download.csdn.net/download/sf_long/2116451?utm_source=bbsseo]//download.csdn.net/download/sf_long/2116451?utm_source=bbsseo[/url]
文章热词 设计制作学习 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 产品经理培训视 大数据视学习路线
我们是很有底线的