Mysql表设计相关: 这两种查询方式那个快?

iProgram 2003-10-08 02:38:34
有一个表(tab1)有1万条记录, 主要结构如下:
id name rank , id是主索引唯一, rank是记录的排名(按某种规则). 这个排名基本不变,而且只关心前100个排名. 换句话说, 1万条记录只有其中的100条rank值有效(1-100),其余都是相同的值,如200.
现在我想选出前100名, 有两种方案:
1. 直接选
SELECT * from tab1 order by rank LIMIt 0,100
2. 建立一个top100表, 提前把tab1中的那100条记录的id存到top100表里面:
top100表结构: id, tab1_id, rank (这个和tab1表的id对应), 然后选的时候:
SELECT tab1.* from tab1, top100 where top100.tab1_id=tab1.id order by top100.rank LIMIT 0,100
之所以这样做是考虑到方案2只须按top100和software的索引选择, 要比在tab1 1万条记录中选快, 这种想法对不对?
...全文
45 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
iProgram 2003-10-18
  • 打赏
  • 举报
回复
我的测试环境就是这样呀. 如果是row越少越好的话,我改用第一种方法了. 但是有些操作还是要很多row(比如上千)
earthwind 2003-10-09
  • 打赏
  • 举报
回复
其实10000记录不算什么,如果按照第二中方法,会有多余的开销。除了跨表查询,还有,前期准备,的开销。
fish21cn 2003-10-09
  • 打赏
  • 举报
回复
你不是说tab1有10000条记录吗?
可是你的测试环境并不是这样啊,所以你的explain可能不大准确。

不过我想问问xuzuning(唠叨),那方案二连接两个表所花的时间又怎么样计算呢?
应该也是不小的花费吧。

gz高手发言。
fish21cn 2003-10-09
  • 打赏
  • 举报
回复
mark
iProgram 2003-10-08
  • 打赏
  • 举报
回复
方法1只有36 rows的tab1, 方法2虽然只有1 row的tab1, 却需要63 rows的top100 (因为top100里只有63条记录)
iProgram 2003-10-08
  • 打赏
  • 举报
回复
可是我用explain看, 方法1比方法2好呀. 真是郁闷
方法1: EXPLAIN select * from tab1 where rank<100 limit 0,100
table  type possible_keys  key  key_len  ref    rows  Extra
tab1  range   rank     rank    4    NULL     36  Using where

方法2: EXPLAIN select tab.* from tab1,top100 where top100.tab_id=tab1.id ORDER BY top100.rank
table  type possible_keys  key  key_len  ref    rows  Extra
top100  ALL    tab_id   NULL   NULL   NULL     63  Using filesort
tab1  eq_ref   id      id    4  top100.tab_id  1
cnpr 2003-10-08
  • 打赏
  • 举报
回复
http://www.eaoo.com/design/list.asp?classid=2&Nclassid=9
xuzuning 2003-10-08
  • 打赏
  • 举报
回复
在没有索引的字段上进行筛选,只能用顺序查找。一万条记录平均查找五千条记录得到一条记录
当该字段上有索引时,至少可使用折半查找。一万条记录平均查找十四条记录得到一条记录
iProgram 2003-10-08
  • 打赏
  • 举报
回复
为什么? 要是我不在tab1的rank上建索引, 在select时用:
select * from tab1 where rank<100 order by rank, mysql是否足够聪明把rank当索引用?
xuzuning 2003-10-08
  • 打赏
  • 举报
回复
在“这个排名基本不变”下,首选方案二

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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