mysql - 如何高效的查詢需要合并大數(shù)據(jù)表的操作
問題描述
1.存在兩個(gè)數(shù)據(jù)庫(kù)Shanghai和Beijing(假設(shè)其他數(shù)據(jù)丟失,中國(guó)人口數(shù)據(jù)只剩下上海和北京)2.兩個(gè)數(shù)據(jù)庫(kù)中都有同樣結(jié)構(gòu)的表table_people,數(shù)據(jù)量都在一千萬左右3.有以下數(shù)據(jù)Shanghai.table_people
idusernamebirthday1jhon2016-08-15 12:00:002may2016-08-14 13:00:003abcd11112015-08-01 14:00:00............Beijing.table_people
idusernamebirthday1mike2016-08-16 23:58:002kitty2016-08-03 15:00:063ab1112014-01-01 15:16:18............問:1.如何高效的(1s內(nèi))查出最近在中國(guó)出生的前十個(gè)人2.對(duì)于YII框架數(shù)據(jù)提供器應(yīng)該怎么寫
問題解答
回答1:(SELECT * FROM Beijing.table_people ORDER BY birthday limit 10)union all(SELECT * FROM shanghai.table_people ORDER BY birthday limit 10)ORDER BY birthday limit 10
你看這種思路可以嗎?
回答2:birthday類型得是datetime不能是string,然后作索引。查的時(shí)候先union all再order by再limit 10。mysql內(nèi)部應(yīng)該是就是對(duì)兩個(gè)索引做一下歸并排序
如果想更快,就把birthday類型改成int的
回答3:每個(gè)表都取符合條件的前10條數(shù)據(jù),然后再對(duì)取出來的數(shù)據(jù)在代碼里排序并取出最終的前10條數(shù)據(jù)。
不過這樣寫代碼也很累,以后加一個(gè)表就得改代碼,所以建議找一下數(shù)據(jù)庫(kù)中間件的相關(guān)資料。
回答4:兩個(gè)sql,根據(jù)id desc 以及l(fā)imit 10,都插入到一個(gè)臨時(shí)表,對(duì)20條數(shù)據(jù)時(shí)間排序再limit10
相關(guān)文章:
1. javascript - immutable配合react提升性能?2. javascript - sublime快鍵鍵問題3. javascript - nodejs關(guān)于進(jìn)程間發(fā)送句柄的一點(diǎn)疑問4. javascript - 移動(dòng)端上不能實(shí)現(xiàn)拖拽布局嗎?5. 實(shí)現(xiàn)bing搜索工具urlAPI提交6. Apache 已經(jīng)把網(wǎng)站根目錄的改為allow from all了,但是服務(wù)器還是不能訪問?7. css - 寫頁面遇到個(gè)布局問題,求大佬們幫解答,在線等,急!~8. phpstudy8.1支持win11系統(tǒng)嗎?9. 配置Apache時(shí),添加對(duì)PHP的支持時(shí)語法錯(cuò)誤10. vue.js - Vue 如何像Angular.js watch 一樣監(jiān)聽數(shù)據(jù)變化

網(wǎng)公網(wǎng)安備