请教一个where + in + order by 多字段排充问题

cxluzi 2012-11-15 04:50:07
数据大概25万。

select id,title from sell where status = 5 and catid in(605,1270,8310,1330,129,130,1320,52,66,90,21) order by vips ,updatetime desc limit 10000,20


做了联合索引,status,catid,vips,updatetime 四个做的联系索引testi

但是查询还是要0.22秒。还能再优化吗。

explain结果如下

*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: sell
type: range
possible_keys: status,title,catid,status1,testi
key: testi
key_len: 5
ref: NULL
rows: 34948
Extra: Using where; Using filesort
1 row in set (0.01 sec)


这种情况还能再优化吗
...全文
222 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cxluzi 2012-11-16
  • 打赏
  • 举报
回复
索引比较多,有些是别人建的.好象是取出数据再排序.如果把catid in换成 catid就正常.不用using filesort.

Table 	Non_unique 	Key_name 	Seq_in_index 	Column_name 	Collation 	Cardinality 	Sub_part 	Packed 	Null 	Index_type 	Comment 
sell 	0 	PRIMARY 	1 	id 	A 	332625 	NULL 	NULL 	  	BTREE 	 
sell 	1 	editdate 	1 	editdate 	A 	1465 	NULL 	NULL 	  	BTREE 	 
sell 	1 	editdate 	2 	vips 	A 	1788 	NULL 	NULL 	  	BTREE 	 
sell 	1 	editdate 	3 	updatetime 	A 	166312 	NULL 	NULL 	  	BTREE 	 
sell 	1 	status 	1 	status 	A 	5 	NULL 	NULL 	  	BTREE 	 
sell 	1 	status 	2 	thumb 	A 	332625 	NULL 	NULL 	  	BTREE 	 
	 
sell 	1 	time1 	1 	vips 	A 	8 	NULL 	NULL 	  	BTREE 	 
sell 	1 	time1 	2 	updatetime 	A 	166312 	NULL 	NULL 	  	BTREE 	 
sell 	1 	time1 	3 	id 	A 	332625 	NULL 	NULL 	  	BTREE 	 
sell 	1 	title 	1 	status 	A 	5 	NULL 	NULL 	  	BTREE 	 
sell 	1 	title 	2 	title 	A 	332625 	NULL 	NULL 	  	BTREE 	 	 
sell 	1 	catid 	1 	catid 	A 	273 	NULL 	NULL 	  	BTREE 	 	  	 
sell 	1 	status1 	1 	status 	A 	5 	NULL 	NULL 	  	BTREE 	 
sell 	1 	edittime 	1 	updatetime 	A 	166312 	NULL 	NULL 	  	BTREE 	 
sell 	1 	testi 	1 	status 	A 	5 	NULL 	NULL 	  	BTREE 	 
sell 	1 	testi 	2 	catid 	A 	1072 	NULL 	NULL 	  	BTREE 	 
sell 	1 	testi 	3 	vips 	A 	1439 	NULL 	NULL 	  	BTREE 	 
sell 	1 	testi 	4 	updatetime 	A 	166312 	NULL 	NULL 	  	BTREE

ACMAIN_CHM 2012-11-15
  • 打赏
  • 举报
回复
贴出你的 show index from sell  以供分析。 你目前的语句应该是只利用了 status,catid 的索引,然后生成结果后需要重新排序。
rucypli 2012-11-15
  • 打赏
  • 举报
回复
status,catid,vips,updatetime 这个索引去掉 做成catid,status,vips,updatetime 这个顺序的联合索引
cxluzi 2012-11-15
  • 打赏
  • 举报
回复
不好意思。打错了。是排序

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧