mysql where条件中用到大于或者小于时,查询未用到索引的问题 [问题点数:30分,结帖人lzcwxc1986]

Bbs1
本版专家分:0
结帖率 100%
Bbs5
本版专家分:2163
Bbs1
本版专家分:0
Bbs5
本版专家分:2163
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月 其他数据库开发大版内专家分月排行榜第三
Bbs12
本版专家分:471936
版主
Blank
名人 2012年 荣获名人称号
Blank
榜眼 2010年 总版技术专家分年内排行榜第二
Blank
探花 2009年 总版技术专家分年内排行榜第三
Blank
进士 2013年 总版技术专家分年内排行榜第十
2011年 总版技术专家分年内排行榜第七
有些 where 条件会导致索引无效
在<em>查询</em>中,WHERE <em>条件</em>也是一个比较重要的因素,尽量少并且是合理的 <em>where</em> <em>条件</em>是徆重要的,尽量在多个<em>条件</em>的时候,把会提取尽量少数据量的<em>条件</em>放在前 面,减少后一个 <em>where</em> <em>条件</em>的<em>查询</em>时间。有些 <em>where</em> <em>条件</em>会导致<em>索引</em>无效:  1.<em>where</em> 子句的<em>查询</em><em>条件</em>里有!=,MySQL 将无法使用<em>索引</em>。  2.<em>where</em> 子句使用了 Mysql 函数的时候,<em>索引</em>将无效,比如:selec...
mysql索引之三:索引使用注意规则(索引失效--存在索引但不使用索引)*
转自:http://www.cnblogs.com/duanxz/p/5244703.html使用<em>索引</em>时,有以下一些技巧和注意事项:(1)越小的数据类型通常更好:越小的数据类型通常在磁盘、内存和CPU缓存中都需要更少的空间,处理起来更快。(2)简单的数据类型更好:整型数据比起字符,处理开销更小,因为字符串的比较更复杂。在MySQL中,应该用内置的日期和时间数据类型,而不是用字符串来存储时间;以及用...
mysql关于or前后条件索引问题
        不是说,一条sql语句只能用一个<em>索引</em>么?但如下这样一条sql语句 SELECT * FROM `comment` WHERE `toconuid` = '10' or `tocomuid` = '10'         其中toconuid列和tocomuid列分别为单列<em>索引</em>,explain后显示两个<em>索引</em>都用了,extra为 Using union(toconuid,toc...
mysql中or是否走索引详解
图片提交太麻烦了,就直接传个压缩包吧  
mysql 不走索引 总结
在MySQL中,并不是你建立了<em>索引</em>,并且你在SQL中使<em>用到</em>了该列,MySQL就肯定会使<em>用到</em>那些<em>索引</em>的,有一些情况很可能在你不知不觉中,你就“成功的避开了”MySQL的所有<em>索引</em>。 现假设有t_stu表,age,sname上建立了<em>索引</em> <em>索引</em>列参与计算 如果<em>where</em><em>条件</em>中age列中使用了计算,则不会使用该<em>索引</em> SELECT `sname` FROM `t_stu` WHERE `age`=20;-- ...
mysql 索引是否有效和查询条数有没有关系 组合索引最左匹配原则
<em>mysql</em>  <em>where</em><em>条件</em> <em>索引</em>字段 <em>查询</em>条数大概维持在30%左右,<em>查询</em>条数多余30%<em>索引</em>失效。在<em>索引</em>是否失效 场景有很多:or   like %string  ,  %string% &amp;lt;&amp;gt;  , !=&amp;gt;not in , not exist经过自测,在<em>查询</em>数据量占总数据量的30%+  <em>索引</em>就会失效我们一起来看一下:如图给test_user表 test_id字段加了<em>索引</em>  tes...
MySql使用索引和不使用索引的几种情况
<em>索引</em>是优化sql<em>查询</em>速度的重要优化方式,但是在存在<em>索引</em>时,有一些情况会使用<em>索引</em>,有一些情况下不会使用<em>索引</em>。 使用<em>索引</em>的情况如下: 1.对<em>索引</em>进行全值匹配,例如一个组合<em>索引</em>包括3列,当<em>查询</em>语句中出现indexA=A and indexB=B and indexC=C这样的语句时,会使用<em>索引</em>。 2.对B-Tree<em>索引</em>进行范围匹配,当<em>索引</em>类型为B—Tree<em>索引</em>时,类似于indexA > A and
Mysql中哪些Sql不走索引
要尽量避免这些不走<em>索引</em>的sql: 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
联合索引:优化多条件查询
联合<em>索引</em>是由多个字段组成的组合<em>索引</em>。若经常需要使用多个字段的多<em>条件</em><em>查询</em>(WHERE col1 = … AND col2 = … AND col3 = …),可以考虑使用联合<em>索引</em>。现在数据表myIndex中i_testID是主键列,其他列无任何<em>索引</em>:多<em>条件</em>查找名字为xiaoming,城市为beijing,年龄为21的人:返回了一行数据,从执行计划中看到,<em>查询</em>没有使用任何<em>索引</em>,进行了全表扫描,磁盘IO...
mysql联结查询时无法使用索引 ——原因:where条件语句中两表字段数据类型不同
今天检查线上慢<em>查询</em>语句时发现一个left join语句不能使用<em>索引</em>,大概情况如下: receipt表和ship表字段ORDER_ID都添加了<em>索引</em>,但explain结果显示语句未走<em>索引</em> 经过检查,发现两表字段ORDER_ID的数据类型不同,一个是int,一个是varchar,修改一致后: <em>查询</em>时间明显缩短: 所以建表的时候一定要注意字段的数据类型,要处处严谨,不能随意。 ...
mysql测试where子句中使用or关键字能否用到索引
create table if not exists tbl_item_1( id int(10) not null auto_increment, name varchar(20) not null, categoryid int(10) not null, price double(6,2) not null, desc varchar(20)
mysql的in查询是可以用到索引吗?亲测详解
一、前言 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如题所示,这个<em>问题</em>很早之前就听过了,之前我也是一直以为in<em>查询</em>是用不到<em>索引</em>的。后来陆陆续续看到很多博客,有的说in<em>查询</em>可以用<em>索引</em>,有的说不能用<em>索引</em>,所以博主就越发好奇起来。到底能不能用<em>索引</em>,绝对有个正确的答案,而不是这样的模棱两可。 二、in<em>查询</em>的一些总结 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...
sql中索引不会被用到的几种情况
1、<em>查询</em>谓词没有使用<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,优化器会直
为什么where条件中使用or索引不起作用?
为什么<em>where</em><em>条件</em>中使用or<em>索引</em>不起作用?<em>where</em><em>条件</em>中使用or,<em>索引</em>就会失效,会造成全表扫描    是误区 一,要求使用的所有字段,都必须建立<em>索引</em>。 二,数据量太少,制定执行计划时发现全表扫描比<em>索引</em>查找更快。 三,确保<em>mysql</em>版本5.0以上,且<em>查询</em>优化器开启了index_merge_union=on, 也就是变量optimizer_switch里存在index_mer
mysql 不走索引的情形
<em>mysql</em> 不走<em>索引</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. 在 ...
MongoDB学习(3)(条件查询,排序,索引的方法)
MongoDB<em>条件</em>操作符 <em>大于</em> -$gt <em>小于</em>-$lt <em>大于</em>等于 -$gte <em>小于</em>等于-$lte 找年龄<em>大于</em>19的 相当于select * from col <em>where</em> age > 19; 其他几个也是同样的操作 <em>大于</em>和<em>小于</em>符号一起使用 $type操作符 基于bson类型来检索集合中匹配的数据类型 并返回结果 double 对应的数字是1  String对应的数字是2
MySQL 存在索引但是不被使用的情况
1、如果MySQL估计使用<em>索引</em>比全表扫描更慢,则不适用<em>索引</em>, 比如:列key_part1均匀的分布在1-100之间。下面的sql则不会使用<em>索引</em> select * from table_name <em>where</em> key_part1 > 1 and key_part1 2、如果使用memory/heap表,并且<em>where</em>语句中不适用“=”进行<em>索引</em>,则不会使用<em>索引</em>。heap表只有在“=”的<em>条件</em>下,才
yii2查询条件Where全解析
在Yii的Model里进行<em>查询</em>的时候 <em>where</em>是必不可少的。 Where方法声明为 static <em>where</em>( $condition ) 其中参数 $condition 类型为字符串<em>或者</em>数组 1、字符串 字符串是最简单的,直接按sql中的<em>where</em><em>条件</em>写就可以,如 $condition = 'name=\'xiaoming\' and age>10'; 2、数组
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>和统计信息生成执行计划,得到数据。 第二步:将得到的数据排序。 当...
mysql索引 mysql中select 查询条件随谈
<em>mysql</em><em>索引</em> 使用<em>索引</em>—编写代码时候尽可能利用<em>索引</em>,不过非常小的表除外。因为表小,忽略表中<em>索引</em>能使表的读取更为高效。 什么是<em>索引</em> 数据库中的<em>索引</em>是某个表中一列或多列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。 创建<em>索引</em>语法:    create [<em>索引</em>类型] index <em>索引</em>名称 on 表名(列名) [with fill factor = 填充因子值0-100]
避免写出不走索引的SQL, MySQL
在MySQL中,并不是你建立了<em>索引</em>,并且你在SQL中使<em>用到</em>了该列,MySQL就肯定会使<em>用到</em>那些<em>索引</em>的,有一些情况很可能在你不知不觉中,你就“成功的避开了”MySQL的所有<em>索引</em>。 现假设有t_stu表,age,sname上建立了<em>索引</em> <em>索引</em>列参与计算 如果<em>where</em><em>条件</em>中age列中使用了计算,则不会使用该<em>索引</em> SELECT `sname` FROM `t_stu
mysql5.7在多列索引 in条件查询的优化
山谷中偶遇,分享出来。某日(ri),zabbix <em>mysql</em>慢日志监控发现很多陌生的慢<em>查询</em>。 大概如下:SELECT * FROM `entry_device` WHERE (`entry_no`, `device_udid`) IN (('464580908742086656', 'ffffffffdeaea5fcffffffff96fddfcf')), ('464109860674342912
TP5 where条件查询
$rs=Db::name('manage')-&gt;<em>where</em>('type',$sotype)-&gt;<em>where</em>($type,'like',&quot;%{$key}%&quot;)-&gt;order('id desc')-&gt;limit($limit)-&gt;page($page)-&gt;select();
mysql update 有无索引对比
<em>mysql</em>> create table t3(id int,name char(10)); Query OK, 0 rows affected (0.04 sec) <em>mysql</em>> insert into t3 values(1,'a1'); Query OK, 1 row affected (0.00 sec) <em>mysql</em>> insert into t3 values(2,'a2'); Que
MySQL中查询不使用索引的情况汇总
有<em>索引</em>,但用不上的情况: 在数据库表中,使用<em>索引</em>可以提高<em>查询</em>速度。但是<em>索引</em>并不是对所有的<em>查询</em>操作都会生效的。比如以下几种情况,将导致<em>索引</em>失效: 1、如果<em>查询</em><em>条件</em>用or,必须or<em>条件</em>中的每个列都加上<em>索引</em>,否则无效。 2、对于复合<em>索引</em>(又叫多列<em>索引</em><em>或者</em>联合<em>索引</em>),如果<em>查询</em>的列不使用复合<em>索引</em>的第一部分,则不使用<em>索引</em>。例如,tb表的复合<em>索引</em>为(key1,key2,key3),则<em>查询</em>select *
Yii2增删改查-查询 where参数详细介绍
本篇文章会详细介绍and、or、between、in、like在<em>where</em>方法中的使用方法和举例。
记录一次mysql索引但是没有用到的经历
前提:公司测试人员需要连接数据库取数据,但是并发量高的时候会报等待获取连接超时,所以经理让我帮忙处理下,首先想到增大超时等待时间,改为60秒,300百左右并发是没有<em>问题</em>的,但是提高到500以上时又报辣个错误,就在考虑应该优化下<em>查询</em>sql,增加<em>索引</em>使<em>查询</em>时间缩短来减少等待时间。 两个sql很简单,如下: SELECT ID,ALARM_NUM,AlARM_text from iemp_alar...
联合索引,在哪些查询条件下可能会用到
在数据库建了联合<em>索引</em>,abc三字段。 第一:单独使用a,或b,或c查,会不会<em>用到</em><em>索引</em> 第二:使用ab,bc,ac查,会不会<em>用到</em><em>索引</em> 使用explain EXPLAIN select * from mp_dialogue_record p <em>where</em> p.agent_id = 199969; EXPLAIN select * from mp_dialogue_record p <em>where</em>...
联合索引优化多条件查询
联合<em>索引</em>是由多个字段组成的组合<em>索引</em>。若经常需要使用多个字段的多<em>条件</em><em>查询</em>(WHERE col1 = … AND col2 = … AND col3 = …),可以考虑使用联合<em>索引</em>。现在数据表myIndex中i_testID是主键列,其他列无任何<em>索引</em>:多<em>条件</em>查找名字为xiaoming,城市为beijing,年龄为21的人:返回了一行数据,从执行计划中看到,<em>查询</em>没有使用任何<em>索引</em>,进行了全表扫描,磁盘IO大
MySQL条件表达式case when查询
先创建一张这样的一张表user表 再创建一张成绩表 需求是<em>查询</em>到学生各科的成绩,并划分级别。成绩<em>大于</em>等于60<em>小于</em>80属于及格,成绩<em>大于</em>80优秀,<em>小于</em>60为不及格 select u.user_class as '班级',u.user_number as '学号',u.user_name as '姓名',s.subject as '学科',s.score as '分数',(case...
Where语句设置不当导致索引失效
虽然说<em>索引</em>在使用上可能有种种限制,但是还是在数据库设计中被充分利用。因为在大部分情况下<em>索引</em>还是被用来提高数据库性能的一个工具。不过有些数据库工程师往往会犯一些低级的错误,导致<em>索引</em>失效。如在Where<em>条件</em>子句中设置了不合适的<em>条件</em>,从而在<em>查询</em>等操作时导致原先在表中设置的<em>索引</em>不起作用。笔者以前也多次犯过类似的错误。笔者今天在这里就抛砖引玉,把这些常见的<em>问题</em>总结一下。希望后来的人能够尽量少犯这些错误。
Mysql查询语句中的引号对索引的影响
http://www.ideawu.net/blog/archives/775 2014-01-16 MySQL<em>查询</em>语句中的引号对<em>索引</em>使用的影响. 高性能Web架构 Views: 2815 | 2 Comments # explain select * from t1 <em>where</em> user_ip=123 limit 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,
tp5 whereTime()大于小于不起作用
请查看数据库字段类型是不是TimeStamp
mysql 大于当前时间条件查询
select * from t_news <em>where</em> activity_end_time &amp;gt; now()举个例子就是,比如今天是4月7号。我们数据库里有4月5号,4月6号,4月9号以及4月8号的新闻那么我查出来的就是  --&amp;gt;4月9号,4月8号...
如何用rownum实现大于小于逻辑?(返回rownum在4—10之间的数据)
今开发人员人员需要查找介于10-21的数据: SELECT * FROM (SELECT FROM WHERE GROUP BY ORDER BY desc) ta  WHERE ta.rownum > 10 AND ta.rownum 不得结果,事实上: rownum是一个总是从1开始的伪列,Oracle 认为这种<em>条件</em>(不能使用>)不成立,查不到记录.但可以使用相减的方法
MySQL只能使用一个索引
那么,如果在firstname、lastname、age这三个列上分别创建单列<em>索引</em>,效果是否和创建一个firstname、lastname、 age的多列<em>索引</em>一样呢?答案是否定的,两者完全不同。当我们执行<em>查询</em>的时候,MySQL只能使用一个<em>索引</em>。如果你有三个单列的<em>索引</em>,MySQL会试图选择一个限制最严格的<em>索引</em>。但是,即使是限制最严格的单列<em>索引</em>,它的限制能力也肯定远远低于firstname、las...
Mysql 索引使用条件
1&amp;gt;数据库中<em>索引</em>的结构是一种排序的数据结构。 2&amp;gt;数据库<em>索引</em>是通过B树和变形的B+树实现的。 3&amp;gt;什么情况下不适合建立<em>索引</em>?   1.对于在<em>查询</em>过程中很少使用或参考的列,不应该创建<em>索引</em>。   2.对于那些只有很少数据值的列,不应该创建<em>索引</em>。   3.对于那些定义为image,text和bit数据类型的列,不应该创建<em>索引</em>。   4.当修改性能远<em>大于</em>检索性能,不应该建立索...
MySQL数据库优化总结如果索引多个字段,第一个字段要是经常作为查询条件的。如果只有第二个字段作为查询条件,这个索引不会起到作用;
MySQL数据库优化总结       http://www.cnblogs.com/villion/archive/2009/07/23/1893765.html         对于一个以数据为中心的应用,数据库的好坏直接影响到程序的性能,因此数据库性能至关重要。一般来说,要保证数据库的效率,要做好以下四个方面的工作:数据库设计、sql语句优化、数据库参数配置、恰当的硬件资源和
分区表查询带分区条件,没有分区消除
1、数据库中交易流水表越来越大,对流水表以create_time列做了分区,开发配合对sql改进,加了create_time做<em>查询</em><em>条件</em>。但是观察sql执行情况,<em>查询</em>sql的<em>where</em><em>条件</em>中虽然有create_time,但是却是全表扫描所有分区,性能甚至低于分区之前  分区情况如下:    sql文本和执行计划如下:    对应的java代码如下,其中使用了timestamp类型:
关于Mysql索引的一点思考--什么情况下索引不会被用到
<em>mysql</em><em>索引</em>是一个非常好用的检索优化手段,但是用不好,也会影响数据库的<em>查询</em>速度。 下面讲几种<em>索引</em>使用不到的情况: 1.like<em>查询</em>中,使用%    %在<em>条件</em>之前 这种情况下,<em>索引</em>是不会被使<em>用到</em>的。 这里讲一下我的分析,如有不对,还请各位指正。 Mysql默认使用的引擎是InnoDB引擎,InnoDB引擎底层结构是B树结构,也就是二叉树结构,有兴趣的可以去看看数据结构,这里我就
TP5 where条件查询和 ThinkPHP运算符 与 SQL运算符 对照表
[html] view plain copy$rs=Db::name('manage')-&amp;gt;<em>where</em>('type',$sotype)-&amp;gt;<em>where</em>($type,'like',&quot;%{$key}%&quot;)-&amp;gt;order('id desc')-&amp;gt;limit($limit)-&amp;gt;page($page)-&amp;gt;select();  引用:http://blog.csdn.net/...
mysql索引分析与优化
<em>查询</em>是数据库技术中最常用的操作。<em>查询</em>操作的过程比较简单,首先从客户端发出<em>查询</em>的SQL语句,数据库服务端在接收到由客户端发来的SQL语句后, 执行这条SQL语句,然后将<em>查询</em>到的结果返回给客户端。虽然过程很简单,但不同的<em>查询</em>方式和数据库设置,对<em>查询</em>的性能将会有很在的影响。   因此,本文就在MySQL中常用的<em>查询</em>优化技术进行讨论。讨论的内容如:通过<em>查询</em>缓冲提高<em>查询</em>速度;MySQL对<em>查询</em>的自动优...
Mysql 使用主键查询未应用主键索引问题
建了一张表cust_stat.performance,主键设为ym和uid,使用下面的语句查看执行计划。explain select * from cust_stat.performance <em>where</em> ym='201805'结果发现<em>mysql</em>并没有应用主键<em>索引</em>。给ym字段单独加上<em>索引</em>以后,发现<em>查询</em>正常应用了<em>索引</em>。推断估计是如果是联合主键,自动建的也是联合主键<em>索引</em>,如果只有一个<em>查询</em><em>条件</em>还是会进行全...
索引的使用跟查询的and的前后顺序没有关系
<em>索引</em>的使用跟<em>查询</em>的and的前后顺序没有关系依然记得以前看网上的帖子的时候说<em>查询</em>要按照顺序来,不能将and的前后顺序弄反了,不然用不了<em>索引</em>.今天上课听老师讲才发现原来跟and的顺序没关系.使用的引擎是innodb.
or连接是否会使用索引
or连接<em>条件</em>字段,全部设置<em>索引</em>的时候,才会使用<em>索引</em>,否则将不会使用<em>索引</em>。 验证如下: 数据表结构如下 create TABLE book ( bookid INT NOT NULL primary key auto_increment, bookname VARCHAR(255) NOT NULL , authors VARCHAR(255) NOT NULL, info VARCH...
针对where条件中日期型字段前面加函数的慢查询的优化
当字段上创建了<em>索引</em>,但是<em>where</em><em>条件</em>中该列前面加了函数时,会使<em>索引</em>失效。有时候可以通过改写sql来优化。 如: select count(*) from T_SYNCLOG <em>where</em> TO_DAYS(NOW()) - TO_DAYS(CREATE_TIME) = 0 and STATUS=0 and ENTITY_TYPE='org'; 推断该sql含义是查看创建日期为今天的记录条数
mysql优化,导致查询不走索引的原因总结
最近公司让我做SQL优化的工作,用explain发了一些<em>问题</em>。常见的像OR ,IN,>= ,<em>或者</em>是嵌套等导致<em>索引</em>失效,导致<em>查询</em>性能降低的<em>问题</em>在这里就不做陈述了,网上的文章一搜一 大片。我只是写点个人工作中遇到的,网上不好搜索的,但是不保证所有的场景都试用,后续我还会更新。 1、order by 和 limit 结合使用,如果<em>where</em> 字段,order by字段都是<em>索引</em>,那么有limit<em>索引</em>会使
Oracle 尽量避免在 SQL语句的WHERE子句中使用函数
-- Start 在 WHERE 子句中应该尽量避免在列上使用函数,因为这样做会使该列上的<em>索引</em>失效,影响SQL 语句的性能。即使该列上没有<em>索引</em>,也应该避免在列上使用函数。考虑下面的情况: CREATE TABLE EMPLOYEE ( NAME VARCHAR2(20) NOT NULL,---姓名 REGISTERDATE TIMESTAMP---注册时间 ); 现在要
mysql索引命中规则
最左匹配原则 1、先定位该sql的<em>查询</em><em>条件</em>,有哪些,那些是等值的,那些是范围的<em>条件</em>。 2、等值的<em>条件</em>去命中<em>索引</em>最左边的一个字段,然后依次从左往右命中,范围的放在最后。分析讲解 1、<em>mysql</em>的<em>索引</em>分为聚簇<em>索引</em>和非聚簇<em>索引</em>,<em>mysql</em>的表是聚集<em>索引</em>组织表。 聚集规则是:有主键则定义主键<em>索引</em>为聚集<em>索引</em>;没有主键则选第一个不允许为NULL的唯一<em>索引</em>;还没有就使用in
where条件中出现了(不等于/多重范围)就一定不走索引了吗
今天朋友抛了一个群里的讨论给我,如下图 这题我选择了A,B,因为我认为A和B都不满足最左;最后朋友实际建表的测试结果如下(也就是说答案应该是A,B,D) 按理说不等于不走<em>索引</em>应该是SQL优化的常识了,为什么我在选择的时候排除了D呢?因为2个月前我遇到了这样一个语句SELECT MAX(id) FROM a WHERE user_id !...
数据库触发联合索引的几个条件
联合<em>索引</em>是建立在某个表(Table)上的,由多个列(Column)构成的<em>索引</em>。 触发联合<em>索引</em>是有<em>条件</em>的: 示例如下。首先创建表: CREATE TABLE E (e1 INT, e2 VARCHAR(9), e3 INT, PRIMARY KEY(e1, e3)); 这样就建立了一个联合<em>索引</em>:e1,e3 1、使用联合<em>索引</em>的全部<em>索引</em>键,可触发<em>索引</em>的使用。 例如:SELECT
Java 解决oracle in 条件 不能大于1000的问题
工具类:SqlInConditionStringUtil 其中:getOracleSQLIn方法适合单一SQL语句 getOracleSQLIn方法适合嵌套SQL语句 [code=&quot;java&quot;] public static String getOracleSQLIn(List ids, int count, String field) { count...
关于sql where条件中in传值大于1000的解决办法
虾米链接: http://2814704901.iteye.com/blog/1934564 大家都知道 sql <em>where</em><em>条件</em>中in的参数 最大为1000  如果我们要传一个<em>大于</em>1000的值 显然是不可行的这里 我们可以以十为组 来传参。List&amp;lt;String&amp;gt; urls=new ArrayList&amp;lt;String&amp;gt;(); 这里urls的大小是10000 //存储...
sql order by与索引之间的关系(where条件出现字段才有效)
ORDER BY 通常会有两种实现方法,一个是利用有序<em>索引</em>自动实现,也就是说利用有序<em>索引</em>的有序性就不再另做排序操作了。另一个是把结果选好之后再排序。 用有序<em>索引</em>这种,当然是最快的,不过有一些限制<em>条件</em>,来看下面的测试。 测试数据:student表有两个字段id ,sid ,id是主键。一共有20W条记录,id从1到200000,sid也是从1到200000的数据。 第一种情况 : or
Mysql日期差函数,Mysql选择两个日期字段相差大于小于一定时间
 SELECT * from table <em>where</em> TIMESTAMPDIFF(type,pretime,latertime)>100 TIMESTAMPDIFF函数,需要三个参数,type是比较的类型,可以比较FRAC_SECOND、SECOND、 MINUTE、 HOUR、 DAY、 WEEK、 MONTH、 QUARTER或 YEAR几种类型,pretime是前一个时间,比较时用后
为什么你创建的数据库索引没有生效,索引失效的条件
几乎所有的小伙伴都可以随口说几句关于创建<em>索引</em>的优缺点,也知道什么时候创建<em>索引</em>能够提高我们的<em>查询</em>性能,什么时候<em>索引</em>会更新,但是你有没有注意到,即使你设置了<em>索引</em>,有些时候<em>索引</em>他是不会生效的!这不仅考察了大家对<em>索引</em>的了解程度,还要让大家在使用的时候能够正确的使用。以下介绍了一些可能会造成<em>索引</em>失效的特殊情况,希望大家在平时开发和面试的时候能够注意到! 一、如何判断数据库<em>索引</em>是否生效 首先在接着探讨...
MYSQL order by排序与索引关系总结
MySQL InnoDB B-Tree<em>索引</em>使用Tips 这里主要讨论一下InnoDB B-Tree<em>索引</em>的使用,不提设计,只管使用。B-Tree<em>索引</em>主要作用于WHERE和ORDER BY子句。这里讨论的均在MySQL-Server-5.1.42测试 CREATE TABLE `friends` ( `ID` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, `u
【ci框架】CI 框架数据库操作函数 this->db->where() 的使用
CI 框架数据库操作函数 this->db-><em>where</em>() 的使用 1) $this->db-><em>where</em>(‘MATCH (field) AGAINST (“value”)’, NULL, FALSE) 如果把$this->db-><em>where</em>() 接受可选的第三个参数设置为 FALSE, CodeIgniter 将不会为那些包含反勾号的字段名或表名提供保护。 2) $this->db->
Elasticsearch(4)-实现sql的大于小于语法
如何使用es 实现 sql 中的&gt;= and &lt;= 1、range,sql中的between,<em>或者</em>是&gt;=1,&lt;=1 2、range做范围过滤 1.搜索浏览量在30~60之间的帖子 GET /forum/article/_search { "query": { "constant_score": { "filter": { "ra...
where条件的顺序是否影响mysql的执行效率
<em>where</em><em>条件</em>的顺序,<em>where</em><em>条件</em>的复合<em>索引</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’ 可以从上面的结果看到,两个<em>查询</em>都使<em>用到</em>了username1这个复合<em>索引</em> 单列
“is Null”或“is not null”不能使用索引
“is Null”或“is not null”不能使用<em>索引</em>: <em>索引</em>列使用is Null或is not null最近看书,看到对<em>索引</em>列使用is null 或is not null,有这么句话:Null值不存储在<em>索引</em>中,因此在<em>索引</em>列上带Is null <em>条件</em>的<em>查询</em>不会使用<em>索引</em>,而是使用Table Access Full 操作解析<em>查询</em>语句。如果在<em>索引</em>列上改<em>条件</em>为 Is Not Null
MSSQL中IN是否用索引.....
作者:no_mIss用MSSQL时间快一年了,数据量有时会相对比较多,所以经常要优化,也看过很多资料,但大都有一句:IN、NOT IN不用<em>索引</em>,今天发此贴希望能有人参与讨论,到底IN用不用<em>索引</em>,如果用,在什么情况下用<em>索引</em>,在什么情况下不用<em>索引</em>。前提:表[Table]字段[id] INT PRIMARY KEY 聚集<em>索引</em>以下写法:SELECT * FROM [Table] WHERE id = 1肯
MySQL系列—建索引的几大原则和使用索引优化查询
建<em>索引</em>的几大原则1、最左前缀匹配原则,非常重要的原则<em>mysql</em>会一直向右匹配直到遇到范围<em>查询</em>(>、 3 and d = 4,如果建立(a,b,c,d)顺序的<em>索引</em>,d是用不到<em>索引</em>的,如果建立(a,b,d,c)的<em>索引</em>则都可以<em>用到</em>,a,b,d的顺序可以任意调整。2、=和in可以乱序比如a = 1 and b = 2
SQL中索引不会被用到的几种情况
1、<em>查询</em>谓词没有使用<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>中找...
MySQL中大于小于,IN,OR,BETWEEN性能比较
在MySQL中经常会有朋友问关于<em>大于</em><em>小于</em>,IN,OR,BETWEEN,哪个性能更好? 我想有很多朋友会用它们但确实不知道<em>大于</em><em>小于</em>,IN,OR,BETWEEN性能哪个更好吧,下面总结一下关于<em>大于</em><em>小于</em>,IN,OR,BETWEEN性能。 这里的<em>查询</em><em>条件</em>有四种:>=和;between;or;in 这里id列是<em>索引</em>列,如果不是的话,三个<em>查询</em>都是全表扫描,性能差距应该不大。   1  准备环境
mysql关于or的索引问题
<em>mysql</em>关于or的<em>索引</em><em>问题</em> 摘自: http://www.educity.cn/wenda/590849.html http://blog.csdn.net/hguisu/article/details/7106159 问: 不是说,一条sql语句只能用一个<em>索引</em>么 但SELECT * FROM `comment` WHERE `toconuid` = '10' or `tocom
MySQL数据库:索引(三):索引的使用及优化
  相关阅读: MySQL数据库:<em>索引</em>(一):<em>索引</em>原理与实现详解 MySQL数据库:<em>索引</em>(二):<em>索引</em>类型与创建 一、<em>索引</em>优化规则: 1、like语句的前导模糊<em>查询</em>不能使用<em>索引</em>: select * from doc <em>where</em> title like '%XX';   --不能使用<em>索引</em> select * from doc <em>where</em> title like 'XX%';   --非前导模糊...
mybatis 查询条件小于等于0,查询到了所有数据
&amp;amp;amp;lt;if test=&amp;amp;quot;store != null and goodsstatus != '' &amp;amp;quot;&amp;amp;amp;gt; and store &amp;amp;amp;lt;![CDATA[ &amp;amp;amp;lt;= ]]&amp;amp;amp;gt; #{store} &amp;amp;amp;lt;/if&amp;amp;amp;gt; 改成
mysql表关联中的索引使用情况
<em>mysql</em>在某些情况下可以自动优化表关联的关联<em>条件</em>,如:通过分析<em>条件</em>中的字段是否有<em>索引</em>,关联表中的数据总数之类,通过这些<em>条件</em><em>mysql</em>便可以实现一些自动优化sql语句的功能。 以下几种情况基本是靠一些简单实验进行验证,没有得到确切的官方文档证实 一、inner join情况下<em>mysql</em>自动优化 表结构细节不做介绍,简单介绍下 bus_creative表中的owner字段和sys_user表
主键查询值,int与字符串类型混用导致索引失效
select * from user <em>where</em> id in (5230,’45’) *************************** 1. row ***************************           id: 1  select_type: SIMPLE        table: user         type: ALLpossible_keys: PRIMAR
MYSQL float 查询结果有问题
<em>问题</em>:discount float 字段select * from table <em>where</em> table.discount &amp;gt;=0.9解决办法:select * from table <em>where</em> table.discount &amp;gt;=0.90疑问: 搞不清楚为什么是这么写
mysql IN 查询的时候索引不起作用
其实很简单,<em>索引</em>是否起叙用,主要取决于字段类型: 1. 如果字段类型为字符串,需要给in<em>查询</em>中的数值与字符串值都需要添加引号,<em>索引</em>才能起作用。 2. 如果字段类型为int,则in<em>查询</em>中的值不需要添加引号,<em>索引</em>也会起叙用。 IN的字段,在联合<em>索引</em>中,按以上方法,也会起作用。 3.<em>mysql</em><em>查询</em>优化器认为全表扫描时如果速度<em>大于</em>使用<em>索引</em>,就会不用<em>索引</em>,你可以使用FORCE INDEX强制mysq...
Mysql 索引问题-日期索引使用
这两天发现原来的<em>查询</em>效率慢了,使用explain 查看,居然没有使用<em>索引</em>, 我的<em>索引</em>是日期类型的,首先想到的是<em>mysql</em>对日期类型的<em>索引</em>的处理机制是不是不同,在<em>where</em><em>条件</em>里试了几种,发现效果都差不多, <em>where</em> dayid >= ‘20161121’ <em>where</em> dayid >= ‘2016-11-21’ <em>where</em> dayid between ‘2016-11-01’ a
mysql如何确认复合索引有使用到哪些索引字段的测试
一、基本信息 MariaDB [lots]> select @@version; +---------------------+ | @@version           | +---------------------+ | 10.0.20-MariaDB-log | +---------------------+ 1 row in set (0.00 sec) <em>mysql</em>
MySql是怎么使用的索引,在哪些情况下会使用到索引
<em>索引</em>是用来快速查找指定的行。如果不使用<em>索引</em>,MySql必须从第一行开始读取整个表直到找到相关的行。如果是一张大表,这将是一大笔消耗。如果表为<em>问题</em>列建立一个<em>索引</em>,MySql可以快速的确定位置在寻找数据文件中而不用查找所有的数据。这是远远超过按顺序读取表的每一行。 大部分MySql <em>索引</em>(PRIMARY KEY, UNIQUE, INDEX, and FULLTEXT)被存储在B
关于 SQL in, or 到底走不走索引问题ss
    关于这个<em>问题</em>,一般我们都是在网上搜索答案但是搜索出来的几乎都说,in、or s 使用后不走<em>索引</em>,最开始我也是一直这样认为的,但是最近自己在测试时就找到它到底走不走<em>索引</em>了。自己测试时使用 <em>mysql</em>  5.6,在测试中 sql 语句 最前面 都加有 explain 关键字,explain SELECT * FROM t_supplier_hr WHERE id &amp;gt; 9865 or su...
mybatis查询sql:where语句“查询时间字段书写问题”引发的索引失效
今天碰巧看到了网友的《Oracle date和timestamp类型混用时需要注意的<em>索引</em>失效<em>问题</em>》这篇文章,2年前遇到了类似<em>问题</em>,很有同感,特此转载。   我当时的遇到<em>问题</em>的场景: 前提: Oracle数据库字段trade_time类型为DATE mybatis 调整前: beginDate为java.util.Date类型 mybatis<em>查询</em>sql中<em>where</em><em>条件</em>写法:t
mysql联合索引与Where子句优化浅析
本文介绍下,<em>mysql</em>中进行联合<em>索引</em>与<em>where</em>子句优化的相关知识,有兴趣的朋友一起研究下吧。 <em>问题</em>描述: 把排序、<em>条件</em>等一个一个去除来做测试,结果发现<em>问题</em>就出在排序部分,去除排序时,执行时间由原来的48秒变成0.3x秒。 于是,把涉及排序的字段组成一个联合<em>索引</em>alter table xx add index indexname(x1,x2,x3),经过2分钟创建新<em>索引</em>之后,再执行同
查询Mysql未使用的索引
在<em>mysql</em>中如何找出未使用或使用次数很少的<em>索引</em>,这样文章比较多,但很少文章提到用这些方法存在的风险。    http://www.<em>mysql</em>performanceblog.com/2012/06/30/find-unused-indexes/    http://www.<em>mysql</em>performanceblog.com/2012/12/05/quickly-finding-unused-in
Mysql date的大于某一个时间点
直接使用类似下面的方法就可以了 select status,edate,cdate from cp_trade_master <em>where</em> pay=2300 and proxy_uid=139144 and edate>'2016-07-27 19:30:00' order by edate desc;
Thinkphp3.2 中的where条件复杂条件下的条件组合
组合<em>查询</em>的主体还是采用数组方式<em>查询</em>,只是加入了一些特殊的<em>查询</em>支持,包括字符串模式<em>查询</em>(_string)、复合<em>查询</em>(_complex)、请求字符串<em>查询</em>(_query),混合<em>查询</em>中的特殊<em>查询</em>每次<em>查询</em>只能定义一个,由于采用数组的<em>索引</em>方式,<em>索引</em>相同的特殊<em>查询</em>会被覆盖。 一、字符串模式<em>查询</em> 数组<em>条件</em>可以和字符串<em>条件</em>(采用_string 作为<em>查询</em><em>条件</em>)混合使用,例如: $User = M("Us
Mysql 带 in 的删除操作会不走索引
今天遇到一个性能<em>问题</em>,最后定位到一个删除操作特别慢。delete from t_policy <em>where</em> id in (select policyid from t_policy_user <em>where</em> userid = 1067919); 语句很简单explain 发现 t_policy 没有走<em>索引</em>。<em>mysql</em>&amp;gt; explain delete from t_policy <em>where</em> id...
tp框架where条件查询数据库
Where <em>条件</em>表达式格式为: $map['字段名'] = array('表达式', '操作<em>条件</em>'); 其中 $map 是一个普通的数组变量,可以根据自己需求而命名。上述格式中的表达式实际是运算符的意义: ThinkPHP运算符 与 SQL运算符 对照表 TP运算符 SQL运算符 例子 实际<em>查询</em><em>条件</em> eq = $map['id
Mysql order by语句未使用索引的思考
今天早上查看网站,发现非常慢!进linux 用top查看,发现MySQL cpu到了100%。开始怀疑是<em>mysql</em>性能的<em>问题</em>,不会10万条数据就卡成这样吧?虽然我的linux是在服务器上放了个虚拟机,但也不至于10万条记录挂啊? 网上找了一大把文章,my.cnf也设置了,我虚拟机内存是2G,将key_buf设置成512M 还是卡。非常郁闷!       最后没办法,只能用explain来找原
MySQL优化--where条件字段的顺序对效率的影响 (02)
学生表 Student id(编号) name(名字) age(年龄) height(身高) 1 Tommy 26 170 2 Jerry 23 180 3 Frank 30 160          如表所示,这里只是呈现了3条数
IN 查询的时候索引不起作用?
其实很简单,<em>索引</em>是否起叙用,主要取决于字段类型: 1. 如果字段类型为字符串,需要给in<em>查询</em>中的数值与字符串值都需要添加引号,<em>索引</em>才能起作用。 2. 如果字段类型为int,则in<em>查询</em>中的值不需要添加引号,<em>索引</em>也会起叙用。 IN的字段,在联合<em>索引</em>中,按以上方法,也会起作用。
mysql查询where条件中的or和and注意事项
在<em>mysql</em>的<em>where</em><em>条件</em>里, and 优先于 or 如果要改变优先级, 需要在想要将其做最小逻辑判断的<em>条件</em>外加括号(), 哪怕是单个<em>条件</em>也是如此. 建议将所有需要做最小逻辑判断的单<em>条件</em> 或 组合<em>条件</em> 都加上括号, 易于理解 使用示例 : select xxx from table_name <em>where</em> (a=1 or b=1) and (c=1);
索引查询条件顺序的影响
原帖地址:http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=207897环境:Sql Server2000 +sp4<em>问题</em>:select datediff(day,20040910,20040920)  --这句可以执行--而下面这句不能执行(有时也可以执行)--sub_para为varchar(8),错误信息是:从字符串
Mysql使用索引可能失效的场景
1.WHERE字句的<em>查询</em><em>条件</em>里有不等于号(WHERE column!=…),MYSQL将无法使用<em>索引</em> 2.类似地,如果WHERE字句的<em>查询</em><em>条件</em>里使用了函数(如:WHERE DAY(column)=…),MYSQL将无法使用<em>索引</em> 3.在JOIN操作中(需要从多个数据表提取数据时),MYSQL只有在主键和外键的数据类型相同时才能使用<em>索引</em>,否则即使建立了<em>索引</em>也不会使用 4.如果WHER
TP5 比较运算符 查询表达式
官方文档:https://www.kancloud.cn/manual/thinkphp5/135182 <em>查询</em>表达式 版本 新增功能 5.0.9 比较运算增加闭包子<em>查询</em>支持 5.0.4 支持对同一个字段多次调用<em>查询</em>方法 <em>查询</em>表达式支持大部分的SQL<em>查询</em>语法,也是ThinkPHP<em>查询</em>语言的精髓,<em>查询</em>表达式的使用格式: wher
剑指Offer(Java版) 下载
剑指Offer题目的Java代码编写。 相关下载链接:[url=//download.csdn.net/download/universe_ant/9842861?utm_source=bbsseo]//download.csdn.net/download/universe_ant/9842861?utm_source=bbsseo[/url]
C#金典源码(9个)下载
C#金典源码(9个), ch01 仿QQ2008聊天程序(C#源码) ch02 写的一个超好看的时钟 ch03 俄罗斯方块游戏 ch03 添加DOS快速通道右键的简单思路 ch04 贪吃蛇游戏的编制 ch08 研究生管理信息系统 ch07 仓库管理信息系统 相关下载链接:[url=//download.csdn.net/download/xiqing5627/2021117?utm_source=bbsseo]//download.csdn.net/download/xiqing5627/2021117?utm_source=bbsseo[/url]
《PowerBuilder程序设计教程》电子教案下载
PowerBuilder程序设计教程PPT 相关下载链接:[url=//download.csdn.net/download/lixibin1987/2343540?utm_source=bbsseo]//download.csdn.net/download/lixibin1987/2343540?utm_source=bbsseo[/url]
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java学习常用到的问题 云计算用到的技术
我们是很有底线的