用于排序:如何建立索引

z1z2z3z4 2009-03-22 07:44:23
product表:
========================================================================
id(主键)
title(varchar)
cid(产品分类)
userid(用户id)
updatetime(更新时间)
========================================================================

现在希望能够按分类查看产品,同时产品按更新时间排序,那么两种索引方式:

1、建立cid索引,并建立updatetime索引,用这个语句查询:
(1)select * from product where cid=123 order by updatetime desc

2、建立复合索引cid+updatetime,这样查询:
(2)select * from product where cid=123 order by updatetime desc
(3)select * from product where cid=123 order by cid,updatetime desc

哪种方式正确?或者都不正确?
...全文
231 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzl8146 2009-05-03
  • 打赏
  • 举报
回复
使用2个单列索引时,

select * from product where cid=123 order by updatetime desc

这个只利用cid的优化了where,没有进行order by 的优化


而一个多列索引时

二者优化都有

选择2
fcoolx 2009-03-22
  • 打赏
  • 举报
回复

针对这个查询,我选第二种
shunan 2009-03-22
  • 打赏
  • 举报
回复
第二种,时间在第二维影响会小很多,如果cid不怎么变化的话.不过我觉得就建个cid索引即可.当然explain下最好,实践出真理...
z1z2z3z4 2009-03-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 shunan 的回复:]
不建议使用第一种方案,时间如果经常更新的话,就会对索引结构影响比较大,影响insert,update,除非这么做很值.
[/Quote]
时间经常更新。

第二种方案也一样频繁修改索引的吧。
shunan 2009-03-22
  • 打赏
  • 举报
回复
不建议使用第一种方案,时间如果经常更新的话,就会对索引结构影响比较大,影响insert,update,除非这么做很值.
ACMAIN_CHM 2009-03-22
  • 打赏
  • 举报
回复
用explain看一下mySQL的执行计划,一比较就知道哪个正确了。 实践是检验的最好方法。

56,679

社区成员

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

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