变量参数导致sql不走索引,有什么建议吗 [问题点数:50分]

Bbs2
本版专家分:449
结帖率 93.18%
Bbs9
本版专家分:50214
版主
Blank
榜眼 2018年总版新获得的技术专家分排名第二
Blank
金牌 2018年10月 总版技术专家分月排行榜第一
2018年9月 总版技术专家分月排行榜第一
2018年8月 总版技术专家分月排行榜第一
Blank
银牌 2018年12月 总版技术专家分月排行榜第二
2018年11月 总版技术专家分月排行榜第二
2018年7月 总版技术专家分月排行榜第二
Blank
铜牌 2019年1月 总版技术专家分月排行榜第三
Bbs5
本版专家分:3900
SQL中索引不会被用到的几种情况
1、查询谓词没有使用<em>索引</em>的主要边界,换句话说就是select *,可能会<em>导致</em>不走<em>索引</em>。 比如,你查询的是SELECT * FROM T WHERE Y=XXX;假如你的T表上有一个包含Y值的组合<em>索引</em>,但是优化器会认为需要一行行的扫描会更有效,这个时候,优化器可能会选择TABLE ACCESS FULL,但是如果换成了SELECT Y FROM T WHERE Y = XXX,优化器会直接去<em>索引</em>中找...
一个查询不走索引的例子
-- 查询不走<em>索引</em>的例子,因为不能对NULL进行<em>索引</em>,所有存在null的情况下,查询不走<em>索引</em>。当指定了<em>索引</em>的字段为not null的时候,查询才会走<em>索引</em>。-- 创建测试用表,并建立<em>索引</em>SYS@test&amp;gt;create table t11 as select * from dba_objects where object_id is not null; Table created. SYS@...
SQL语句建立索引不走索引的几种情况
1、查询谓词没有使用<em>索引</em>的主要边界,换句话说就是select *,可能会<em>导致</em>不走<em>索引</em>。 比如,你查询的是SELECT * FROM T WHERE Y=XXX;假如你的T表上有一个包含Y值的组合<em>索引</em>,但是优化器会认为需要一行行的扫描会更有效,这个时候,优化器可能会选择TABLE ACCESS FULL,但是如果换成了SELECT Y FROM T WHERE Y = XXX,优化器会直接去<em>索引</em>中...
T-SQL之变量导致索引无效/何谓SQLSERVER参数嗅探
关于<em>变量</em><em>导致</em><em>索引</em>无效的情况,在使用工作中其实经常遇到,我看到一篇写的不错的文章就转载过来丰富我的收藏噶。 转载自:http://www.cnblogs.com/slade/archive/2012/04/29.html T-SQL之<em>变量</em><em>导致</em><em>索引</em>无效  (一)问题提出 1,在开发中是否遇到一个情况,就是在where后写明具体值时可以用到<em>索引</em>,使用<em>变量</em>时却不行了呢? 2,是否
oracle 绑定变量索引优缺点
绑定<em>变量</em>优点: 可以在library cache中共享游标,避免硬解析以及与之相关的额外开销 在大批量数据操作时将呈数量级来减少闩锁的使用,避免闩锁的竞争 缺点: 绑定<em>变量</em>被使用时,查询优化器会忽略其具体值,因此其预估的准确性远不如使用字面量值真实,尤其是在表存在数据倾斜(表上的数 据非均匀分布)的列上会提供错误的执行计划。从而使得非高效的
不走索引原因
Oracle在执行一个SQL之前,首先要分析一下语句的执行计划,然后再按执行计划去执行。分析语句的执行计划的工作是由优化器(Optimizer)来完成的。不同的情况,一条SQL可能有多种执行计划,但在某一时点,一定只有一种执行计划是最优的,花费时间是最少的。相信你一定会用Pl/<em>sql</em> Developer、Toad等工具去看一个语句的执行计划,不过你可能对Rule、Choose、First ro
instr 不能用变量参数里,来创建函数索引 利用返回值[待总结]
instr 不能用<em>变量</em>在 <em>参数</em>里,来创建函数<em>索引</em> 利用返回值 在表内容已经定的情况下 输入值 通过函数所得的输出值要对应固定的。输入值不能是<em>变量</em>
mysql的in会让索引失效吗?
my<em>sql</em>的in会让<em>索引</em>失效吗?不会! 看结果: my<em>sql</em>> desc select * from tb_province where name in ('lily3', 'lily2', 'lily1'); +----+-------------+-------------+------------+------+---------------+------+---------+------
过程中用新变量导致该列不走索引问题
调用过程时候,比如日期<em>变量</em> 过程中,用另外<em>变量</em>替换了一下。 set @rq11=substring(@rq1,1,4)||'/'||substring(@rq1,5,2)||'/'||substri
字段中有null值查询不走索引的问题解决
生产环境发现有一条<em>sql</em> 效率很差,发现是由于查询中有null值,<em>导致</em>了执行计划不走<em>索引</em>。 搜索了解决办法,主要是创建该字段和其它常量字段的联合<em>索引</em> 或者通过函数<em>索引</em>排除空值的情况。 下面是测试过程 --测试 构造测试表 create table test_null (id  number(10), comm varchar2(20)); 插入测试数据 decl
SQL SERVER 中is null 和 is not null 将会导致索引失效吗?
http://www.cnblogs.com/kerrycode/p/4550673.html
sqlserver中is null条件是否使用索引的问题(测试结果是null值也可以使用索引?)
看了一些资料,有提到使用is null条件时不使用<em>索引</em>; 所以本打算用''代替null; 但经测试is null还是使用<em>索引</em>的;只有is not null不使用<em>索引</em>; 但<>''也是不使用<em>索引</em>的,所以
不走索引的原因
补充:不走<em>索引</em>的原因,甚至加上hint 还不走<em>索引</em>,那可能是因为你要走<em>索引</em>的这列是nullable,虽然这列没有空值。(将字段改为not null) 备注 : 不走<em>索引</em>的其它原因 1、建立组合<em>索引</em>,但查询谓词并未使用组合<em>索引</em>的第一列,此处有一个INDEX SKIP SCAN概念。 2、在包含有null值的table列上建立<em>索引</em>,当时使用select count(*) from t
数据类型的不匹配可能会导致索引失效
        Sybase和SQL Server在这一点上有所不同,如果条件比较中的数据类型不匹配的话,可能会引起<em>索引</em>失效,<em>导致</em>潜在的Performance问题。       简单说明如下:       Create Table Test(c1 int not null,c2 money default 0,c3 varchar(20),constraint PK_Test primar
IN 查询的时候索引不起作用?
其实很简单,<em>索引</em>是否起叙用,主要取决于字段类型: 1. 如果字段类型为字符串,需要给in查询中的数值与字符串值都需要添加引号,<em>索引</em>才能起作用。 2. 如果字段类型为int,则in查询中的值不需要添加引号,<em>索引</em>也会起叙用。 IN的字段,在联合<em>索引</em>中,按以上方法,也会起作用。
mysq order by 不走索引问题
问题描述 今天遇到一个问题,在一个报表导出的功能中,需要导出用户的某些记录的所有数据,有些用户有多达10万的记录,导出过程非常慢,需要10多秒。经过排查,发现是查询数据库的时候的问题,查询数据居然用了7秒左右。起初看到<em>sql</em>没发现<em>什么</em>问,<em>sql</em>写得中规中矩,只查询需要的列,使用<em>索引</em>,遵循<em>索引</em>规则等等,但是他就是要那么长时间。 问题分析 表面上看不出问题,那只能用explain大法来分析分析了, 原...
sql不走索引总结(多看多记住啊)
Oracle在执行一个SQL之前,首先要分析一下语句的执行计划,然后再按执行计划去执行。分析语句的执行计划的工作是 由优化器(Optimizer)来完成的。不同的情况,一条SQL可能有多种执行计划,但在某一时点,一定只有一种执行计划是最优的,花费时间是最少的。 相信你一定会用Pl/<em>sql</em> Developer、Toad等工具去看一个语句的执行计划,不过你可能对Rule、Choose、First
什么样的sql不走索引
<em>什么</em>样的<em>sql</em>不走<em>索引</em> 要尽量避免这些不走<em>索引</em>的<em>sql</em> SELECT `sname` FROM `stu` WHERE `age`+10=30;-- 不会使用<em>索引</em>,因为所有<em>索引</em>列参与了计算 SELECT `sname` FROM `stu` WHERE LEFT(`date`,4) 1990; -- 不会使用<em>索引</em>,因为使用了函数运算,原理与上面相同 SELECT * FROM `h
关于 SQL in, or 到底走不走索引的问题ss
    关于这个问题,一般我们都是在网上搜索答案但是搜索出来的几乎都说,in、or s 使用后不走<em>索引</em>,最开始我也是一直这样认为的,但是最近自己在测试时就找到它到底走不走<em>索引</em>了。自己测试时使用 my<em>sql</em>  5.6,在测试中 <em>sql</em> 语句 最前面 都加有 explain 关键字,explain SELECT * FROM t_supplier_hr WHERE id &amp;gt; 9865 or su...
什么where条件中使用or索引不起作用?
为<em>什么</em>where条件中使用or<em>索引</em>不起作用?where条件中使用or,<em>索引</em>就会失效,会造成全表扫描    是误区 一,要求使用的所有字段,都必须建立<em>索引</em>。 二,数据量太少,制定执行计划时发现全表扫描比<em>索引</em>查找更快。 三,确保my<em>sql</em>版本5.0以上,且查询优化器开启了index_merge_union=on, 也就是<em>变量</em>optimizer_switch里存在index_mer
MySQLl数据量不一样,导致走不同的索引
1、测试环境:MySQL 5.7.17 2、测试表结构 1 2 3 4 5 6 7 8 9 10 11 my<em>sql</em>> show create table a; +-------+-------------------------------------------------------------------------------
验证索引列NULL不走索引
今天遇到问题,同事问我,order by 主键列 desc 与order by 日期列(加了<em>索引</em>) desc ,怎么执行时间差距这么大;于是查看执行计划不一样: order by 主键列 desc 对应 INDEX FULL SCAN DESCENDING  order by 日期列(加了<em>索引</em>) desc 对应 TABLE ACCESS FUL 我加hint /*+ index(table
where条件中出现了(不等于/多重范围)就一定不走索引了吗
今天朋友抛了一个群里的讨论给我,如下图 这题我选择了A,B,因为我认为A和B都不满足最左;最后朋友实际建表的测试结果如下(也就是说答案应该是A,B,D) 按理说不等于不走<em>索引</em>应该是SQL优化的常识了,为<em>什么</em>我在选择的时候排除了D呢?因为2个月前我遇到了这样一个语句SELECT MAX(id) FROM a WHERE user_id !...
关于sqlserver in 走不走索引
先看图 看懂了吗,当数据量较少时,没有走<em>索引</em>。当插入10万数据之后,走了<em>索引</em>。大多数说 in 不走<em>索引</em>,可能就在于测试的时候插入的数据量不多<em>导致</em>的吧~
oracel 字段不走索引
用oracle做全表查询时发现一个问题,如果数据库某个varchar2类型的字段建了<em>索引</em>,但是查询的时候扔进入的值是long或integer类型的数据,oracle会不走<em>索引</em>,oracle会对传入的<em>参数</em>做to_char()处理,所以不会走<em>索引</em>。 走<em>索引</em>如果<em>参数</em>不是字符串类型,而是数字类型,则不走<em>索引</em>。走<em>索引</em> select t.username,t.userpassword,t.sex,t.add
为or、in平反——or、in到底能不能利用索引
先说一个笑话,作为开场白。俺也换换风格试一试,呵呵。   在以前,有三个书生赶考,在路上遇到了一个算命先生,于是就问算命先生:我们三个人赶考,结果如何呀?算命先生伸出来了一个手指头(食指)。三个书生赶考的结果是,有一个人考中了。三人一想呀,这个挂算的对呀,有一个人考中了嘛。   其实“一个手指头”是很模糊的,很忽悠人的。有各种各样的解释,比如:一个人考中;一个人没考中;一起考中了;
索引失效&子查询-慢查询的起因
My<em>sql</em>中子查询和<em>索引</em>失效会带来检索效率下降的问题,这里列出了新手常常会犯的一些错误
MySQL字符集不一致导致索引失效
两个表join查询,却不走连接条件的<em>索引</em>。当<em>索引</em>无问题,<em>sql</em>也无问题时,就可以去看看这两个表的字符集是否一致,这是我耗费一个下午得出来的经验教训。
mysql不走索引总结
在my<em>sql</em>查询语句中,总会发现明明已经建立了查询字段<em>索引</em>,可是却没有用到,这是因为在my<em>sql</em>中有些查询语句是用不到<em>索引</em>的,总结如下,以供大家分享。1.like语句 2.列类型为字符串类型,查询时没有用单引号引起来 3.在where查询语句中使用表达式 4.在where查询语句中对字段进行NULL值判断 5.在where查询中使用了or关键字, myisam表能用到<em>索引</em>, innodb不行
解决MySQL中IN子查询会导致无法使用索引问题
来源:http://www.jb51.net/article/117412.htm今天看到一篇关于MySQL的IN子查询优化的案例,一开始感觉有点半信半疑(如果是换做在SQL Server中,这种情况是绝对不可能的,后面会做一个简单的测试。)随后动手按照他说的做了一个表来测试验证,发现MySQL的IN子查询做的不好,确实会<em>导致</em>无法使用<em>索引</em>的情况(IN子查询无法使用所以,场景是MySQL,截止的版本...
通过复合索引来避免is null使索引失效!
由于oracle<em>索引</em>的特性,使得is null这种条件的<em>sql</em>不能够使用<em>索引</em>。但是我们可以通过复合<em>索引</em>的形式来使这种<em>sql</em>也能使用<em>索引</em>,下面是一个简单的测试: SQL> create table t as select * from dba_objects; 表已创建。 SQL> create index idx_t_id1 on t(object_id); <em>索引</em>已创建。 SQL
SQL Server 聚集索引在函数中使用以至失效(案例)
最近在进行一期的优化,先把数据库中最耗时的前N个语句查询出来! SELECT TOP 10 qp.query_plan,qt.text,total_worker_time from sys.dm_exec_query_stats CROSS APPLY sys.dm_exec_<em>sql</em>_text(<em>sql</em>_handle) qt CROSS APPLY sys.dm_exec_query
不走索引的情况
1、条件字段选择性弱,查出的结果集较大,不走<em>索引</em>; 2、where条件等号两边字段类型不同,不走<em>索引</em>; 3、优化器分析的统计信息陈旧也可能<em>导致</em>不走<em>索引</em>; 4、<em>索引</em>字段 is null 不走<em>索引</em>; 5、对于count(*)当<em>索引</em>字段有not null约束时走<em>索引</em>,否则不走<em>索引</em>; 6、like 后面的字符当首位为通配符时不走<em>索引</em>; 7、使用不等于操作符如: 8、<em>索引</em>字段前加了函数或参加了
Oracle SQL不走索引小记
SQL执行计划不走<em>索引</em> 一、优化器认为走全表扫描更优。 在这种情况下,需要重新分析一遍表,更新表的状态,有助于优化器分析出正确的执行计划。 analyze table tablename compute statistics; analyze index indexname compute statistics; 或者 execdbms_stats.gather_schema_
sql索引不会被用到的几种情况
1、查询谓词没有使用<em>索引</em>的主要边界,换句话说就是select *,可能会<em>导致</em>不走<em>索引</em>。 比如,你查询的是SELECT * FROM T WHERE Y=XXX;假如你的T表上有一个包含Y值的组合<em>索引</em>,但是优化器会认为需要一行行的扫描会更有效,这个时候,优化器可能会选择TABLE ACCESS FULL,但是如果换成了SELECT Y FROM T WHERE Y = XXX,优化器会直
oracle 不走索引的原因
oracle 不走<em>索引</em>的原因 2013-02-01 13:46 9098人阅读 评论(0) 收藏 举报  分类: oracle(27)  create table tb2 as select * from emp; alter table tb2 modify empno number(4) not null; 翻到20W行 create inde
SQL优化:NULL值与索引的使用
NULL是数据库中特有的数据类型,当一条记录的某个列为NULL,则表示这个列的值是未知的、是不确定的。简单的说,由于NULL存在着无数的可能,因此两个NULL不是相等的关系,同样也不能说两个NULL就不相等,或者比较两个NULL的大小,这些操作都没有意义,得不到一个确切的答案。 那么,一个字段有可能存在空值是否适合创建<em>索引</em>呢? 大多数人都听说过这样一句话,<em>索引</em>不存储NULL值。这句话其实
Mybatis的Date类型不走索引的问题
该问题出现在ORACLE 数据库,其他数据库没有试过。 如果JAVA中的属性为DATE,而数据库中是DATE类型的话。mybatis会默认将JAVA中DATE属性映射到数据库的 Timestamp类型。这时就会有这样的查询 where create_time &amp;gt;= v_time 左边为DATE右边为Timestamp.类型不一致,ORACLE会隐式将小的转成大的。 也就是变成这...
Mysql中哪些Sql不走索引
要尽量避免这些不走<em>索引</em>的<em>sql</em>: SELECT `sname` FROM `stu` WHERE `age`+10=30;-- 不会使用<em>索引</em>,因为所有<em>索引</em>列参与了计算 SELECT `sname` FROM `stu` WHERE LEFT(`date`,4) 1990; -- 不会使用<em>索引</em>,因为使用了函数运算,原理与上面相同 SELECT * FROM `houdunwang` WHE
sql不走索引的情况合集
1.两个表join查询,却不走连接条件的<em>索引</em>。当<em>索引</em>无问题,<em>sql</em>也无问题时,就可以去看看这两个表连接字段的字符集是否一致. 2.where条件,where a=b,请保持ab类型一致,虽然数据库可以自动数字和字符的转换,但是会隐式的去调用tochar函数,使用函数后会<em>导致</em>全表扫描,其他不一致类型同理.
order by 不走索引的思考
MySql性能优化,order by 不走<em>索引</em>的思考 2009-07-12 11:43 今天早上查看网站,发现非常慢!进linux 用top查看,发现my<em>sql</em> cpu到了100%。开始怀疑是my<em>sql</em>性能的问题,不会10万条数据就卡成这样吧?虽然我的linux是在服务器上放了个虚拟机,但也不至于10万条记录挂啊? 网上找了一大把文章,my.cnf也设置了,我虚拟机内存
mysql查询不走索引及解决方法
my<em>sql</em>查询,通过explain 分析,没有利用到<em>索引</em>,查询效率不高等出现的问题。
总结mysql不使用索引情况以及如何优化sql语句
首先解释说明一下Explain命令,Explain命令在解决数据库性能上是第一推荐使用命令, 大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看 SQL 语句的执行效 果, 可以帮助选择更好的<em>索引</em>和优化查询语句,写出更好的优化语句。 Explain语法:explain select … from … [where ...] 例如:explain select
to_char函数引发的不走索引
SQL> conn cowork_czsh/cowork_czsh Connected. SQL> set linesize 200 SQL> set pagesize 200 SQL> set autot trace SQL> select workitemhi0_.PERFORMER as col_0_0_ from WORKITEM_HISTORY workitemhi0_ where
in走不走索引?可以用哪个关键字代替?
网上有很多人说in不走<em>索引</em>,事实上我经过执行计划自己测试发现,in明明就是走<em>索引</em>的。看来网上也不全可信啊。后来又查了以下,发现 MySQL 4.1 以上版本的 IN 是走<em>索引</em>的, 但4.0及其以下版本是不走<em>索引</em>的。 原来是这样,4.0以下确实是不走<em>索引</em>的,难怪之前有人说。可以用exist代替in,exit的执行效率要高。in是子查询。而exist是通过id关联,组成一张虚表,操作的是同一张表。...
MySQL中不等号索引问题
最近在使用MySQL中的一个小总结。 在MySQL中,不等号&amp;lt;&amp;gt;在主键字段和唯一<em>索引</em>字段中会走<em>索引</em>,在普通<em>索引</em>的字段上不会走<em>索引</em>。   1.当不等号&amp;lt;&amp;gt;作用在普通<em>索引</em>字段上   表信息: 使用explain查看普通<em>索引</em>字段,没有走<em>索引</em> 2.当不等号&amp;lt;&amp;gt;作用在主键<em>索引</em>字段上   使用explain查看主键<em>索引</em>字段,走<em>索引</em>。   3...
mysql隐式转换导致查询语句不能走索引分析
        如下两条SQL语句,一个不走<em>索引</em>,一个走<em>索引</em>。         在这里,为<em>什么</em>第一条语句未加单引号就不走<em>索引</em>,而第二条加单引号的就走<em>索引</em>呢? 原因是第一条语句由于类型不匹配,MySQL会做隐式的类型转换,都将其转换为浮点数在比较;而第二条语句因为类型一致,不会转浮点数,就是字符串之间的比较,所以就能正常走<em>索引</em>。 一.进一步了解隐式转换 对于第一种情况:        ...
MSSQL中IN是否用索引.....
作者:no_mIss用MSSQL时间快一年了,数据量有时会相对比较多,所以经常要优化,也看过很多资料,但大都有一句:IN、NOT IN不用<em>索引</em>,今天发此贴希望能有人参与讨论,到底IN用不用<em>索引</em>,如果用,在<em>什么</em>情况下用<em>索引</em>,在<em>什么</em>情况下不用<em>索引</em>。前提:表[Table]字段[id] INT PRIMARY KEY 聚集<em>索引</em>以下写法:SELECT * FROM [Table] WHERE id = 1肯
mysql在哪些情况下不使用索引
2.1、like查询已 ‘%…’开头,以’xxx%’结尾会继续使用<em>索引</em>。 下图中第一句使用的%,没有使用<em>索引</em>,从rows为224147,使用<em>索引</em>rows为1。 2.2 where语句中使用 &amp;lt;&amp;gt;和 != 2.3 where语句中使用 or,但是没有把or中所有字段加上<em>索引</em>。 这种情况,如果需要使用<em>索引</em>需要将or中所有的字段都加上<em>索引</em>。 2.4 where语句中对字段表达式操作...
通过重新生成执行计划解决绑定变量执行计划偏差导致SQL执行时间过长
基本要素(时间、用户、问题)      用户11g环境下有段SQL语句在程序中执行效率非常差,但是在pl<em>sql</em>中执行却很快,通过查看执行计划,发现使用了不同的<em>索引</em><em>导致</em>,程序中执行的如下: PLSQL中执行的效果如下: 可以看到差别,使用门诊费用记录_IX_登记时间<em>索引</em>是在pl<em>sql</em>中的执行计划,使用门诊费用记录_UQ_NO的是程序中的执行计划,两者SQL是完全
MongoDB索引使用注意事项、执行计划(explain)
一、Mongo使用<em>索引</em>注意事项 1、低效率查询     1)、$where和$exists完全不能走<em>索引</em>       首先$where是完全不能使用<em>索引</em>的,而$exists也是不可以使用稀疏<em>索引</em>进行查询,因为不存在的字段和值为null的存储方式是一样的,不能有效的过滤掉为null的字段。     2)、$ne取反操作效率很低       取反操作即使可以走<em>索引</em>也需要对全<em>索引</em>进行查询,否则...
索引没用上-date的通病
在oracle数据库开发应用中,查询时间date类型的<em>sql</em>比较多,我相信大家也见过“trunc(created)>=TO_DATE('2013-12-14', 'YYYY-MM-DD')”这类的写法,这样写真的好吗?下面我们做过实验               大家看到了吧?好不好的我就不说了,你们都明白的吧!
子查询到底走不走索引
CREATE TABLE zichaxuntest ( a int(11) NOT NULL, b varchar(255) DEFAULT NULL, c varchar(255) DEFAULT NULL, d varchar(255) DEFAULT NULL, PRIMARY KEY (a), KEY bIndex (b) USING BTREE ) ENGINE=InnoDB DEFAU...
UPDATE能走索引还会锁全表吗
导读 执行UPDATE时,WEHRE条件列虽已有<em>索引</em>,但还会锁全表,肿么回事? 问题描述 叶师傅有次上课过程中执行UPDATE测试案例时,发现虽然WHERE条件列已有<em>索引</em>,有时候能利用二级<em>索引</em>进行更新(且只锁定相应必要的几行记录),但有时候却变成了根据主键进行更新,且会锁全表。我们先来看看下面的例子。 测试表 t1 CREATE TABLE `t1` (  `c1` int(
哪些情况下sql索引会失效
原文:http://www.cnblogs.com/hongfei/archive/2012/10/20/2732589.html 面试时被问到这个问题,记录笔记,免得被面试的人鄙视!! <em>索引</em>不会时时生效,以下集中情况会<em>导致</em><em>索引</em>失效: 1.条件中用or,即使其中有条件带<em>索引</em>,也不会使用<em>索引</em>查询(这就是查询尽量不要用or的原因,用in吧) 注意:使用or,又想<em>索引</em>生效,只能将or条件
mysql优化,导致查询不走索引的原因总结
最近公司让我做SQL优化的工作,用explain发了一些问题。常见的像OR ,IN,>= ,或者是嵌套等<em>导致</em><em>索引</em>失效,<em>导致</em>查询性能降低的问题在这里就不做陈述了,网上的文章一搜一 大片。我只是写点个人工作中遇到的,网上不好搜索的,但是不保证所有的场景都试用,后续我还会更新。 1、order by 和 limit 结合使用,如果where 字段,order by字段都是<em>索引</em>,那么有limit<em>索引</em>会使
MYSQL 索引类型、什么情况下用不上索引什么情况下不推荐使用索引
 my<em>sql</em> explain的使用:http://blog.csdn.net/kaka1121/article/details/53394426 <em>索引</em>类型在数据库表中,对字段建立<em>索引</em>可以大大提高查询速度。假如我们创建了一个 mytable表代码如下:CREATE TABLE mytable(   ID INT NOT NULL,    username VARCHAR(16) NOT NULL  ...
MySQL order by id 也会有不走索引
我在网上找了半天一直疑问着, 不知为<em>什么</em>??但答案找到了, 呵呵。。让我心里解开了 query result(1 records)count(*)993098下面我们 来一步一步看看下面的这条语句:explain select <em>sql</em>_no_cache * from t_page_sample order by id asc limit 900001,20;  query result(1 records)idselect_typetabletypepossible_keyskeykey_lenrefrow
执行计划(是否使用索引)
: 在查询分析器界面右键点击‘显示估计的执行计划(p)’可以查看查询语句消耗的资源,进一步根据资源消耗优化语句。 SQL Server 会有以下方法来查找您需要的数据记录: Note:注意Scan和Seek的区别,Scan是不使用<em>索引</em>的而Seek是使用<em>索引</em>的;这两个才是关键字 1. 【Table Scan】:遍历整个表,查找所有匹配的记录行。这个操作将会一行一行的检查
列中有索引而执行计划不走索引的原因之一的验证
许多ORACLE开发人员对于当他们只检索很少量的行时优化器选择全表扫描而感到困惑,而没有意识到优化器考虑了表中列值的集簇因子。  下面这一段是Oracle 手册中关于CLUSTERING_FACTOR的说明: Indicates the amount of order of the rows in the table based on the values of the index
SQL无法走索引的情况及解决思路
上次丁俊大师在社群上做了CBO优化器和坑爹案例的分享后,反响不是一般的强烈,但其中也有一部分同学表示太高大上了(我也是这样觉得的),消化起来相当有难度,于是便有了本文。绕开复杂的CBO优化器不说,本文将帮你理清那些因为SQL语句编写规范问题<em>导致</em>没有充分利用<em>索引</em>来大幅提升效率的使用场景。一、SQL无法走<em>索引</em>的情况及解决思路因为数据库优化器不够智能,或者一些逻辑原因,<em>导致</em>SQL在比较适合走<em>索引</em>的情况下...
什么select不走索引呢?
select &quot;环节号&quot;,&quot;案件记录号&quot;,&quot;市民姓名&quot;,&quot;市民电话&quot;,&quot;录入时间&quot;,&quot;领导批示&quot;,&quot;办理时间&quot;,&quot;案件类型&quot;,&quot;接线员&quot;,&quot;详细地址&quot;,&quot;主办部门&quot;,&quot;数据来源&quot;,&quot;办理方案&quot;,&quot;派单员&quot;,&quot;派单员备注&q
like百分号前置不会走索引?NO!
  “模糊查询,前置百分号不走<em>索引</em>;后置百分号才会走<em>索引</em>”这可能是大部分人都知道的“常识”,然而,这周在做SQL优化的时候,无意中碰到了意外情况–模糊查询,前置百分号也走<em>索引</em>! 举个栗子 表: TEST_USER <em>索引</em>:INDEX_MOBILE CREATE TABLE `TEST_USER` ( `ID` int(11) NOT NULL AUTO_INCREMENT COMMENT ...
高手心得:提高ORACLE性能的方法(SQL 语句尽量走索引)
一、问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统的响应速度就成为目前系统需要解决的最主要的问题之一。系统优化中一个很重要的方面就是SQL语句的优化。对于海量数据,劣质SQL语句和优质SQL语句之间的速度差别可以达到上百倍,可见对于一个系统不是简单...
PostgreSql 索引失效
<em>什么</em>是<em>索引</em>失效?如果where过滤条件设置不合理,即使<em>索引</em>存在,且where过滤条件中包含<em>索引</em>列,也会<em>导致</em>全表扫描,<em>索引</em>不起作用。<em>什么</em>条件下会<em>导致</em><em>索引</em>失效呢? 1、任何计算、函数、类型转换 2、!= 3、NOT,相当于使用函数 4、模糊查询通配符在开头 5、<em>索引</em>字段在表中占比较高 6、多字段btree<em>索引</em>查询条件不包含第一列 7、多字段<em>索引</em>查询条件使用OR(有时也会走<em>索引</em>扫描,但查询效率不高) ...
避免写出不走索引的SQL, MySQL
在MySQL中,并不是你建立了<em>索引</em>,并且你在SQL中使用到了该列,MySQL就肯定会使用到那些<em>索引</em>的,有一些情况很可能在你不知不觉中,你就“成功的避开了”MySQL的所有<em>索引</em>。 现假设有t_stu表,age,sname上建立了<em>索引</em> <em>索引</em>列参与计算 如果where条件中age列中使用了计算,则不会使用该<em>索引</em> SELECT `sname` FROM `t_stu
ORACLE会使索引失效的条件
1. 没有 WHERE 子句   2. 使用 IS NULL 和 IS NOT NULL   SELECT ... FROM emp WHERE comm IS NULL; comm 列的<em>索引</em>会失效   3. WHERE 子句中使用函数   如果没有使用基于函数的<em>索引</em>,那么 where 子句中对存在<em>索引</em>的列使用函数时,会使优化器忽略掉这些<em>索引</em>。例如:   select
让IS NULL走起索引
由于业务的需要:查看某列值为NULL的记录有多少。 这是一个十分简单的需求,同时也很容易实现。无非就是使用如下语句: SELECT * FROM table1 WHERE xx IS NULL; 结果得出的结果只有几十条记录,但是执行的时间比我想象中的长了许多。一般这样的查询只是要秒秒钟 的问题,但是却花了十几秒,而平时使用IS NOT NULL也没有那么慢啊。于是在有空的时候就查看原因。
mysql 索引 大于等于 走不走索引 最左前缀
你可以认为联合<em>索引</em>是闯关游戏的设计例如你这个联合<em>索引</em>是state/city/zipCode那么state就是第一关 city是第二关, zipCode就是第三关你必须匹配了第一关,才能匹配第二关,匹配了第一关和第二关,才能匹配第三关你不能直接到第二关的<em>索引</em>的格式就是第一层是state,第二层才是city上面举例介绍来源 https://zhidao.baidu.com/question/1863
select 建立了索引但是不走索引
create index indexName on A(abc);此时select abc from A 不走<em>索引</em>。。。。可用如下方法让搜索走<em>索引</em>select distinct(abc)  from A  a where exists (select 1 from A b where a.abc=b.abc)红色部分必须一致。...
慎用mysql max()函数,可通过走索引替换
my<em>sql</em> max() 函数的需扫描where条件过滤后的所有行: 在测试环境中重现: 测试版本:Server version:         5.1.58-log MySQL Community Server (GPL) testtable表中的<em>索引</em> my<em>sql</em>> show index from testtable; +-----------+
索引列上计算引起的索引失效及优化措施以及注意事项
两个示例 例子一 表结构 DROP TABLE IF EXISTS `account`; CREATE TABLE IF NOT EXISTS `account` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `account` int(10) unsigned NOT NULL, `password` char(32)
oracle 时间条件值范围越大就不走索引问题解决:使用强制索引
oracle 时间条件值范围越大就不走<em>索引</em>问题解决:使用强制<em>索引</em>   在写一个比较复杂的统计语句的时候,其中涉及到了时间的条件。但在执行测试过程中发现开始时间和结束时间的范围在两三天的时候执行计划里是走的<em>索引</em>,查询很快,当把时间范围扩大到五天、十天、一个月的时候执行计划里反而全表扫描了,查询效率慢了几十倍不止,这对于统计一个大表来说是致命的。   经过资料查询发现在oracle中有一个因素影响...
由于mysql隐式类型转换导致索引失效的问题
今天在测试执行计划时,发现了以下问题: my<em>sql</em> 1739 due to type or collation conversion on field user表: 主键userId和userName上分别有主键<em>索引</em>和唯一<em>索引</em>。 执行计划任务: 可以看到会执行全表扫描,并没有使用<em>索引</em>。 执行
有些 where 条件会导致索引无效
在查询中,WHERE 条件也是一个比较重要的因素,尽量少并且是合理的 where 条件是徆重要的,尽量在多个条件的时候,把会提取尽量少数据量的条件放在前 面,减少后一个 where 条件的查询时间。有些 where 条件会<em>导致</em><em>索引</em>无效:  1.where 子句的查询条件里有!=,MySQL 将无法使用<em>索引</em>。  2.where 子句使用了 My<em>sql</em> 函数的时候,<em>索引</em>将无效,比如:selec...
一则count(*) count(1) 为啥没有走索引的遭遇
一个超级简单的语句 select count(1) from lixora ; 开发反馈很慢,走了全表扫描,并且反馈说该表上有3个单列<em>索引</em> 一般就2种原因:  1.统计信息不对 2.<em>索引</em>列为 nullable  当时先让开发的兄弟使用 index hint 强制走了下<em>索引</em>,速度飞快, 然后 再select count(lixora) from lixora ,发现也是走<em>索引</em>;
oracle函数索引解决null字段导致索引失效问题
我们知道<em>索引</em>列如果出现null值会<em>导致</em><em>索引</em>失效。具体情况如下: 表中数据如下: 可见storeid列有null值。 当执行查询语句:select * from demo  where storeid= '10';时我们通过pl<em>sql</em>的<em>sql</em>分析(F5触发)可以看到触发全表查询。 那该如何让该在字段有空值的情况下触发<em>索引</em>呢? 有两种方法: 1、建立函数<em>索引</em> create index...
索引失效和注意事项
https://blog.csdn.net/hehexiaoxia/article/details/54312130 <em>索引</em>失效的情况 如果是同样的<em>sql</em>如果在之前能够使用到<em>索引</em>,那么现在使用不到<em>索引</em>,以下几种主要情况: 随着表的增长,where条件出来的数据太多,大于15%,使得<em>索引</em>失效(会<em>导致</em>CBO计算走<em>索引</em>花费大于走全表) 统计信息失效 需要重新搜集统计信息...
关于mysql中由于类型转换导致索引无法使用的问题
my<em>sql</em>> create index idx_create_time on baixyu(create_time); Query OK, 0 rows affected (0.15 sec) Records: 0 Duplicates: 0 Warnings: 0my<em>sql</em>> explain select * from baixyu where create_time >’2017-01-
postgresql 优化之--不会使用索引
--原始表结构如下: postgres=# \d+ postgres_s1_log Table "public.postgres_s1_log" Column | Type | Modifiers | Storage | Stats
索引失效问题,不知道原因
一: select  ID,b.STAND_ID,b.STATION_ID,GROUP_ID,a.OP_TIME,a.BATCH_NUMBER from  data_collect a inner join (SELECT STATION_ID,STAND_ID, max(BATCH_NUMBER) as BATCH_NUMBER     FROM         d...
mysql在何时放弃索引而使用全表扫描
我们知道一般情况下使用<em>索引</em>扫描效率会优于全表扫描,但是有些情况下my<em>sql</em>仍然会放弃<em>索引</em>而是用全表扫描,那么出现这种情况的原因是<em>什么</em>呢?我认为答案很简单,<em>sql</em>查询优化器认为全表扫描效率比<em>索引</em>扫描高,就会使用全表扫描。那么<em>sql</em>优化器是如何计算扫描效率的呢?哈哈,我也不知道!!!大家可以看一下《数据库<em>索引</em>设计与优化》,了解一下数据库<em>索引</em>结构和优化器的原理。 https://www.jianshu...
函数使得索引列失效
在<em>索引</em>列上使用函数使得<em>索引</em>失效的是常见的<em>索引</em>失效原因之一,因此尽可能的避免在<em>索引</em>列上使用函数。尽管可以使用基于函数的<em>索引</em>来 解决<em>索引</em>失效的问题,但如此一来带来的比如磁盘空间的占用以及列上过多的<em>索引</em><em>导致</em>DML性能的下降。本文描述的是一个<em>索引</em>列上使用函数使 其失效的案例。 一、
oracle介绍之oracle不走索引的7种常见情况!
1. 没有 WHERE 子句   2. 使用 IS NULL 和 IS NOT NULL   SELECT ... FROM emp WHERE comm IS NULL; comm 列的<em>索引</em>会失效   3. WHERE 子句中使用函数   如果没有使用基于函数的<em>索引</em>,那么 where 子句中对存在<em>索引</em>的列使用函数时,会使优化器忽略掉这些<em>索引</em>。例如:   select
以通配符(%)开始的like字符串,走索引
本文翻译自 https://jeffkemponoracle.com/2008/01/17/like-with-wildcard-at-start-can-use-an-index/ 了解SQL的同学,都知道,like关键字可以走<em>索引</em>,只要字符串不是以通配符(%)开始。 如果类似 like "%xxx" 的<em>sql</em>,如何走<em>索引</em>呢?基于REVERSE()函数来创建一个函数<em>索引</em>。
SQL优化之不走索引_加hint也不走索引
案例1:隐式类型转换 SQL> create table t(id varchar2(10)); 表已创建。 SQL> insert into t select empno from scott.emp; 已创建14行。 SQL> commit; 提交完成。 SQL> select * from t; ID ---------- 7369 7499 7521
关于Mysql索引的一点思考--什么情况下索引不会被用到
my<em>sql</em><em>索引</em>是一个非常好用的检索优化手段,但是用不好,也会影响数据库的查询速度。 下面讲几种<em>索引</em>使用不到的情况: 1.like查询中,使用%    %在条件之前 这种情况下,<em>索引</em>是不会被使用到的。 这里讲一下我的分析,如有不对,还请各位指正。 My<em>sql</em>默认使用的引擎是InnoDB引擎,InnoDB引擎底层结构是B树结构,也就是二叉树结构,有兴趣的可以去看看数据结构,这里我就
Oracle is null不走索引问题
由于业务的需要:查看某列值为NULL的记录有多少。这是一个十分简单的需求,同时也很容易实现。无非就是使用如下语句: [<em>sql</em>] view plain copy SELECT * FROM table1 WHERE xx IS NULL;   结果得出的结果只有几十条记录,但是执行的时间比我想象中的长了许多。一般这样的查询只是要秒秒钟的问题,但是却花了十几秒,而平
左连接为什么无法使用索引
左连接为<em>什么</em>无法使用<em>索引</em>问题慢查询是很可恶的一件事情啊,想要解决慢查询,必须得使用好<em>索引</em>,可是左连接的话,就用不到<em>索引</em>了。为<em>什么</em>呢? 原因就是:https://www.percona.com/forums/questions-discussions/my<em>sql</em>-and-percona-server/1637-left-join-not-using-index-or-how-to-index-thi
北大青鸟全部学习资料下载地址下载
借花献佛,北大青鸟两学年全部课程!原作者提供的地址第一学期第二部分的有误,我修改过来了,并做成了html格式的,可以直接点击相应的链接进入下载页面,省去了复制地址的麻烦。 相关下载链接:[url=//download.csdn.net/download/shelliu/355148?utm_source=bbsseo]//download.csdn.net/download/shelliu/355148?utm_source=bbsseo[/url]
八通网游客提醒.rar下载
八通网游客提醒.rar八通网游客提醒.rar 相关下载链接:[url=//download.csdn.net/download/haojunqing/2060062?utm_source=bbsseo]//download.csdn.net/download/haojunqing/2060062?utm_source=bbsseo[/url]
WinScp9.0 已注册版 附几个免费的3G空间地址下载
WinScp9.0 已注册版WinScp9.0 已注册版WinScp9.0 已注册版WinScp9.0 已注册版WinScp9.0 已注册版WinScp9.0 已注册版WinScp9.0 已注册版WinScp9.0 已注册版WinScp9.0 已注册版WinScp9.0 已注册版WinScp9.0 已注册版WinScp9.0 已注册版WinScp9.0 已注册版WinScp9.0 已注册版WinScp9.0 已注册版WinScp9.0 已注册版WinScp9.0 已注册版 相关下载链接:[url=//download.csdn.net/download/jone33/2230496?utm_source=bbsseo]//download.csdn.net/download/jone33/2230496?utm_source=bbsseo[/url]
文章热词 设计制作学习 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 区块链建议学习什么 有大数据培训吗
我们是很有底线的