- 論壇徽章:
- 0
|
本帖最后由 okjooo 于 2011-08-04 22:07 編輯
一張是用戶表B ,記錄用戶登錄信息,其中l(wèi)ogintime 是最近登錄時(shí)間。
一張是信息表A,記錄用戶發(fā)布的信息,每個(gè)用戶可以發(fā)布多條信息。
兩個(gè)表uid是用戶的會(huì)員ID,相關(guān)聯(lián)。 表結(jié)構(gòu)附在貼子最下面
目的:需要從A、B 表根據(jù)用戶登錄時(shí)間(logintime)倒序查出 type 為 “123”的10條信息。
我是這樣寫的:
select a.uid,a.title,a.type from a, b where a.type='123' and a.uid=b.uid order by b.logintime DESC limit 10 ;
但是這樣并未能充分利用索引,使用“EXPLAIN”查詢,出現(xiàn)了“Using where; Using temporary; Using filesort”。
如何避免這個(gè)情況呢?
之前考慮把 用戶登錄時(shí)間更新到 A 表。例如在A表也建立一個(gè) logintime,并且和type組成聯(lián)合索引(type,logintime),
這樣之后,寫聯(lián)合查詢確實(shí)沒問題了。但是因?yàn)橛脩裘看蔚卿浂家ジ翧表的logintime 字段,并且因?yàn)槊總(gè)用戶都發(fā)布了很多信息,這就導(dǎo)致A表頻繁被鎖死。
實(shí)在是搞不明白,誠心請(qǐng)教!謝謝!
附表結(jié)構(gòu):
------------------------------------------------------
A 表結(jié)構(gòu)
uid (建立索引)
title
type (建立索引)
B 表結(jié)構(gòu)
uid (建立索引)
username
logintime |
|