mysql 多个order 是不是会导致索引失效 5C

我发现网站使用order by id desc的时候,效率很高,使用order by id desc,time desc 数据库cpu100%了

0

4个回答

mysql一次查询只能使用一个索引。如果要对多个字段使用索引,建立复合索引。
这个建议加(id, time)联合索引,可以使用Explain查看一下执行分析,可以帮助分析SQL,优化查询。

1

a.alter table table_name disable keys b.loading data c.alter table table_name enable keys 对于Innodb: a.将要导入的数据按照主键排序 b.set unique_checks=0,关闭唯一性校验 c.set autocommit=0,关闭自动提交
索引并不是时时都会生效的,比如以下几种情况,将导致索引失效:
注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引
2.对于多列索引,不是使用的第一部分,则不会使用索引
3.like查询是以%开头
4.如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引
5.如果mysql估计使用全表扫描要比使用索引快,则不使用索引
此外,查看索引的使用情况
show status like ‘Handler_read%’;

0

可以在order字段建索引。

0

其实用不用到索引,你可以通过在查询语句前加上关键字 explain或者desc ,然后你就可以看到了;上面字段的意思可以去百度查看;我记得有个字段是显示用的索引;自己试试吧

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
MySQL隐式类型转换导致索引失效
今天发现一个问题,where条件的列上明明有索引,但是执行计划还是走全表扫描mysql>  explain select task_id FROM mostop_xiaodai_collection_call_auto WHERE task_id = 433423882127424 AND task_data_id = 27739131157286912; +----+-----------...
cast函数会导致索引失效吗?
cast(optTime as varchar(10)) between '" + start + "' and '" + end +"' "rnrn上面是where子句的一部分,optTime是VARCHAR类型,start和end是Date类型(如果需要,可以转为String),请问这样的语句会导致optTime上的索引失效吗?
replace是否会导致索引失效?
where replace(索引字段,'-','') = ‘XXXXXXX’;rn这个where语句是否会造成索引失效呢?我测了下,260W的数据,没有replace只要0.016秒,加了replace需要13秒
mysql 的order by 失效?
[code=SQL]SELECT a.FileName, a.FilePath, a.FileSize,a.SubFilePath from TaskFiles a rnrn inner join ( select distinct taskid from groupareatasks where GroupId=1 and Flag !='D') brn on a.TaskId=b.TaskId and a.Flag !='D' order by a.FileSize ASCrnrn[/code]rnrn结果并没有顺序排序
mysql order by 失效了?
我的表是地址和ip组成,都是char型的,这个表是我用其他表做成的,我想用order by 查看地址多少分布,我用的语句是rnrn select host,ip from a order by host desc limit 200;rn可是出来的结果却不是按从多到少的顺序来的,很是混乱,我就搞不清楚了这是怎么了?怎么失效了吗,可是有些其他表没问题啊?rn如图rn+-------------------------------------+------------------+rn| host | ip |rn+-------------------------------------+------------------+rn| http://yximg.mop.com | 60.29.242.112rn |rn| http://y3.ifengimg.com | 121.194.1.117rn |rn| http://y3.ifengimg.com | 58.205.224.142rn |rn| http://y3.ifengimg.com | 113.57.252.238rn |rn| http://y3.ifengimg.com | 59.175.130.246rn |rn| http://y3.ifengimg.com | 59.175.130.53rn |rn| http://y2.ifengimg.com | 59.175.130.106rn |rn| http://y0.ifengimg.com | 59.173.15.238rn |rn| http://y0.ifengimg.com | 59.175.131.159rn |rn| http://y0.ifengimg.com | 59.175.131.238rn |rn| http://y0.ifengimg.com | 219.139.25.81rn |rn
由于mysql隐式类型转换导致的索引失效的问题
今天在测试执行计划时,发现了以下问题: mysql 1739 due to type or collation conversion on field user表: 主键userId和userName上分别有主键索引和唯一索引。 执行计划任务: 可以看到会执行全表扫描,并没有使用索引。 执行
mysql的order by导致很慢
mysql的order by导致很慢 解决方法: 我解决的方法是使用FORCE INDEX强制使用索引,为tcug_datetime字段新建一个名字为tcug_datetime的索引(Normal BTREE) SQL例子:http://www.yayihouse.com/yayishuwu/chapter/1962 ...
mysql order by 索引的小问题
key(column1,column2) rnrnselect * from table1 where column1 = 5 order by column2; //有索引rnselect * from table1 where column1 in(5,6) order by column2; //没有索引 rnrn似乎 where in 就不走索引了 。 rn有其它的方法吗?
为什么索引会失效?
最近碰到一个很奇怪的问题。我在一个字段上建立了索引搜索的时候速度很快但是不知道为什么运行一段时间后有<12个月后速度就变得很慢很慢一直把数据库超时。把该索引删除掉重新建立索引速度快起来了!真的搞不清楚这是怎么回事!是不是索引也会失效还是什么原因?求救高手了!
MySQL哪些情况下索引会失效?
1、如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因) 注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引 2、对于多列索引,不是使用的第一部分,则不会使用索引 3、like查询是以%开头,索引失效;以%结尾,索引有效 4、如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引 5、如果mysql估计使用全表扫描要比...
导致索引失效的一些情况
转载http://blog.sina.com.cn/s/blog_4d9acd450100nt12.html  1.隐式转换导致索引失效.这一点应当引起重视.也是开发中经常会犯的错误.  由于表的字段tu_mdn定义为varchar2(20),但在查询时把该字段作为number类型以where条件传给Oracle,这样会导致索引失效.  错误的例子:select * from test ...
MySQL字符集不一致导致索引失效
两个表join查询,却不走连接条件的索引。当索引无问题,sql也无问题时,就可以去看看这两个表的字符集是否一致,这是我耗费一个下午得出来的经验教训。
mysql 索引失效情况
基于MySQL5.5.33数据量:    索引失效情况总结:    创建索引sql:ALTER TABLE `table_name` ADD INDEX index_name ( `column` ),表中先创建2个字段的普通索引                     1.sql语句中or的语句使用,执行sql:            1).生效                2).未生效   ...
mysql 时间索引失效
项目中查询时间断的数据发现查询时间很长。怀疑没有走时间的索引,于是explain一下 EXPLAIN select * from t_order where created_at>'2015-01-01 00:00:00' and created_at 解析: id: 表示执行的顺序,id的值相同时,执行顺序是从上到下,id的值不同时,id的值越大,优先级越高,越先执行 se
mysql 索引失效
问题: 表table_a数据量达到了280W+,其中使用了一条查询语句,使用到如下条件where sid = XXX and bname = 'XXX' and timestart &gt; '' and timestart &lt; '',在数据表中建sid bname timestart联合索引,结果索引不起作用。 原因: dba在创建数据表的时候,将sid类型定义成了varch...
Mysql之索引失效研究
!!!作者必须声明,做一个实践党而不是在互联网传播经不起考验的博客内容,尤其转载等内容。 关于索引失效,最近做了些微薄研究,希望自己浅陋的知识能给别人带来参考。。。。。我爱开源 贴上数据记录(索引列为name,dept)                         两个索引列区别:name列值不重复,dept列值重复。 以后通过explain select...语句来描述失效原因 ...
MySQL避免索引失效
create table staffs( id int primary key auto_increment, name varchar(24) not null default '' comment '姓名', age int not null default 0 comment '年龄', pos varchar(20) not null default '' ...
Mysql之索引失效
【优化口诀】  全值匹配我最爱,最左前缀要遵守;  带头大哥不能死,中间兄弟不能断;  索引列上少计算,范围之后全失效;  LIKE百分写最右,覆盖索引不写*;  不等空值还有OR,索引影响要注意;  VAR引号不可丢, SQL优化有诀窍。 解析索引失效案例: 前提建立了一个复合索引:ALTER TABLE staffs ADD INDEX idx_staffs_nameAgePos(name...
MySQL 索引失效的场景
举个例子,如我们有一张yesdk_orderlist 表,表中建立了索引的字段如下。 1.以%开头的like 查询语句不能利用B-tree 索引 explain select * from yesdk_orderlist where yesdkAppId like '%2018'; 2.数据类型出现隐式转换(如果原数据类型是字符串,查询条件使用了整型,则无法利用索引,反之...
批量更新会导致触发器失效?
相关触发器:rn[code=SQL]rnCREATE TRIGGER purproductdetail_insert ON dbo.purproductdetail rnFOR INSERTrnASrnDECLARE @State bit,@oldStaterndeclare @itemon nvarchar(50)rnSET NOCOUNT ONrn select @state=state,@itemon=itemon from insertedrn select @oldstate=state from deletedrnrn if update(state)rn beginrn if @state=2 and @oldstate=1 rn update tablec set Amount=Amount+i.Amount from tablec,inserted i where tablec.itemon=i.itemon and tablec.Storeon=i.Storeonrn endrnrnSET NOCOUNT OFFrn[/code]rnrn相关的更新语句:rn[code=SQL]rnupdate purproductdetail set state=2 where itemon in('01','02','03','A01','03')rn/*rn结果TABLEC表的记录有的被触发器更新了amount字段,有的没有,原因到底是??rn*/rn[/code]rnrnrn
mysql order by 不走索引
[code=sql]rncreate table test(rnid int auto_increment primary key,rntname varchar(50),rntremark varchar(50),rnkey idx_name(tname)rn)rndelimiter $$rnCREATE PROCEDURE pro()rnBEGINrn DECLARE init_data INTEGER default 1;rn WHILE init_data <= 1000000 DO rn INSERT INTO test(tname) VALUES(init_data);rn SET init_data = init_data + 1;rn END WHILE; rnENDrnrnset autocommit=0 ;rncall pro();rncommit;rnexplain select * from test order by tname ;rn# id, select_type, table, type, possible_keys, key, key_len, ref, rows, Extrarn1, SIMPLE, test, ALL, , , , , 1001256, Using filesortrn [/code]
【mysql】order by 优化与索引的应用
在某些场景,在不做额外的排序情况下,MySQL 可以使用索引来满足 ORDER BY 子句的优化。虽然 ORDER BY并不完全精确地匹配索引,但是索引还是会被使用,只要在WHERE子句中,所有未被使用的那部分索引(一个索引多个字段的情况)以及所有ORDER BY字段都是一个常量就没问题。下面这些查询语句,使用了索引来对 ORDER BY部分进行优化: SELECT * FROM t
mysql order by 索引使用问题
关于order by的..rnrnINDEX (a, b)rnrnSELECT * FROM tableA ORDER BY a DESC , b DESC ;rn这样在explain里面看到是使用filesort的..rnrnrn而rnINDEX (a, b, c)rnSELECT * FROM tableA WHERE a = xx ORDER BY b DESC, c DESC;rn这样就会使用索引 不是filesort.....rnrn出现这样的情况是我的sql写的有问题还是本身mysql就这样....rnrnmysql 5.0.45
关于mysql order索引问题
[code=sql]rnSELECT * FROM `question` `t` ORDER BY updatetime DESC LIMIT 50rn[/code]rn已经对updatetime建立索引了,并且字段非空.rn下面是表结构rn[code=sql]rn--rn-- 表的结构 `question`rn--rnrnCREATE TABLE IF NOT EXISTS `question` (rn `id` int(11) NOT NULL AUTO_INCREMENT,rn `title` varchar(256) NOT NULL,rn `user_id` int(11) NOT NULL,rn `date` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,rn `updatetime` datetime NOT NULL,rn `answer_num` int(11) DEFAULT '0',rn `click_num` int(11) DEFAULT '0',rn `content` text,rn `useful` int(11) DEFAULT '0',rn `nouse` int(11) DEFAULT '0',rn `tags` varchar(64) DEFAULT NULL,rn PRIMARY KEY (`id`),rn KEY `updatetime` (`updatetime`)rn) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=182 ;rn[/code]
索引在哪些条件下会失效
IS NULL 或IS NOT NULL操作(判断字段是否为空) 判断字段是否为空一般是不会应用索引的,因为B树索引是不索引空值的。 SELECT * FROM mtl_material_transactions mmt WHERE mmt.shipment_number IS NOT NULL &gt; 及 &lt; 操作符(大于或小于操作符) 大于或小于操作符一般情况下是...
drop表的索引会导致过程失效么?
问题:drop表的索引然后重新建立索引会导致过程失效么?如果会的话为什么?rn我在2个数据库进行测试的结果不一致。rn在数据库1 drop表A的索引过程没有失效rn在数据库2 同样drop表A索引调用该表的过程全部失效,不知道是为什么?rn备注:数据库1和数据库2是主机和备机 数据完全一致过程、表完全一致。rn求高人解答。。。。
为什么union中的order by 会失效?
(select suites.description as description,suites.id as id,users.ldap_uid as owner, clusters.name as cluster, rnrnclusters.id as _clusters_id,suites.time_limit as _time_limit,suites.diff_folder as _diff_folder, rn suites.recurrence as _recurrence, suites.ini_file as ini, suites.parent_group_id as rnrn_parent_group_id,suite_groups.name as _parent_group_name, rn concat_ws(' ',app_names.name, app_ver_major.ver_major, app_ver_minor.app_ver_minor) as application, rn app_ver_major.id as _app_ver_major_id, app_ver_minor.id as _app_ver_minor_id, app_names.id as rnrn_app_names_id, suites.baseline_folder as baseline rnfrom suites join applications, app_names, app_ver_major, app_ver_minor, clusters, users,suite_groups on users.id = rnrnsuites.owner_id and applications.id = suites.application_id rn and app_names.id = applications.app_name_id and app_ver_major.id = applications.app_ver_major_id and rnrnapp_ver_minor.id = applications.app_ver_minor_id and clusters.id = suites.cluster_id rn and suites.parent_group_id = suite_groups.id rnwhere suites.id =3194rnorder by suites.id desc)rn[color=#FF0000]union[/color]rn([color=#FF0000]select "fill",suites.id as id,"fill", "fill", "fill" ,"fill","fill", "fill", "fill", "fill","fill", rnrn"fill", "fill", "fill", "fill", suites.baseline_folder as baseline[/color]rnfrom suitesrnwhere suites.suite_parent_id=3194 and suites.baseline_folder<>""rn[color=#FF0000]order by suites.id desc[/color])rnrn一个问题是在union中的order by suites.id desc失效了,输出的结果没有降序(若单独一个查询则成)rn另外,不知道用"fill"填充以维持2个查询列匹配,这种做法是否能适用所有数据库,是否是标准的? 多谢了!
mysql order by多个字段排序
MySql Order By 多个字段 排序规则比如:如要根据ConfigID和MarketID来排序有如下语句:SELECT * FROM TABLE ORDER BY ConfigID, MarketID DESC;那么结果:分析:其实这个语句等同于:先按照ConfigID升序,再按照MarketID降序。SELECT * FROM dngameconfig ORDER BY ConfigID...
mysql order by 多个字段问题
SELECT CheckStatus,CreateTime from qpy_2018jscxy_kjfz ORDER BY CheckStatus,CreateTime DESC   默认不写是ACS,是CheckStatus ASC,CreateTime DESC
mysql之order by 多个列标签
ORDER BY  后可加2个字段,用英文逗号隔开。col1用升序, col2降序,SQL该这样写(这种排序的优先级是先col1 再col2)ORDERBY  col1, col2  DESC也可以这样写,更清楚:ORDERBY  col1 ASC, col2  DESC如果都用降序,必须用两个desc 同样col1的优先级更高,ORDERBY  col1 DESC, col2 DESC...
【mysql】order by多个字段排序
今天遇到了两个字段排序的问题,感觉不是很清晰,所有又按照规则查询了下,总结下。count都是306的有三个。现在需要同时按照age和count排序,测试最后的排序结果。默认都是按照age和count的升序排序SELECT * FROM t_user as t ORDER BY t.age ,t.count ;通过测试,可以看出来,排序结果是先按照age进行升序排序,age如果相同,再按照coun...
MySql Order By 多个字段 排序规则
说在前面 突发奇想,想了解一下mysql order by排序是以什么规则进行的? 好了,话不多说,直接进入正题吧。 MySql order by 单字段 建一测试表如下: CREATE TABLE `a` ( `code` varchar(255) DEFAULT NULL, `name` varchar(255) DEFAULT NULL ) ENGINE=InnoDB DE...
mysql高级索引分析,索引失效
一,索引分析 1,单表 2,两表 3,三表 二,索引失效 三,一般性建议
mysql 连表操作后字符集不同导致索引失效
mysql 连表操作后字符集不同导致索引失效 背景 一个表的字符集为utf8mb4 一个表的字符集为utf8 连表查询后可以发现索引失效的情况,查询很慢。这时候可以通过show warnings;查询警告信息。发现了convert(testdb.t1.code using utf8mb4)之后,发现2个表的字符集不一样。 t1为utf8,t2为utf8mb4。但是为什么表字符集不一样(实际是字段字...
Mysql会选错索引
实例: delete from t;//整表删除 call idata(); //执行存储过程 select * from t where a between 10000 and 20000; 这里没有用到a索引。为什么? 优化器选择索引的依据:扫描行数、是否使用临时表、是否排序(order by有没有用上) 基数:索引上不同值的个数,基数越大,索引区分度越好(相当于唯一索引,查到当...
MySQL引起索引失效的原因
查看索引结构 mysql&amp;amp;amp;amp;amp;amp;gt; show index from staffs; +--------+------------+------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+------------...
mysql高级(五)索引失效
1.索引失效 1.全值匹配 如果不按照顺序来索引失效 综合上述的例子规则 火车头不能少 中间兄弟不能断 如果有开头中间断就会用到部分索引 以上只用到name索引 综合上面例子结论:带头大哥不能死 中间兄弟不能断 范围后全失效,age索引用到是一个范围索引 可以采用输出字段与条件一样的字段,再在这个字段上创建索引 ...
order by多个字段对索引的影响
[img]http://dl2.iteye.com/upload/attachment/0095/1627/e27ef025-c054-3aa3-b86d-e6c23cc685cd.jpg[/img] 某前台sql语句,简化后如下 SELECT products_name,products_viewed FROM `products_description` ORDER BY produc...
Oracle之move操作导致索引失效
/*  结论:很多人想用ALTER TABLE MOVE的方式来降低高水平,结果经常忽略了这个操作会导致索引失效,  请大家通过下列的试验的回顾,以后多留意这点。  另外alter table t shrink space; 是否能十全十美呢,请看后面的案例分析 */  drop table t purge; create table t as select * from db
截断分区数据导致全局索引失效
alter table range_part_tab truncate partition PAR_LIST_MAX ; 这样的语句会对分区表的全局索引失效,可通过 alter index idx_name rebuild; 这样的语句进行全局索引的修复,也可以通过以下语句避免全局索引的失效 alter table range_part_tab truncate partitio