|
問:
1. 現(xiàn)有近億條記錄數(shù)據(jù),分成N個表進行存儲;當然這N個表結(jié)構(gòu)都一樣,如何才能提高這N表的聯(lián)合查詢?表都建了索引;
我在一個上百萬的表上進行單表查詢時間幾乎為0,但幾個同樣的表進行聯(lián)合查詢,結(jié)果處于假死狀態(tài),請問有什么機制可以
提高這N個表的聯(lián)合查詢速度?
2.如何請?zhí)岣咂渌?結(jié)合 這N幾個表進行查詢?我覺得同結(jié)構(gòu)表結(jié)合查詢就很慢,再結(jié)合其它不同結(jié)構(gòu)表 會更麻煩些,請高
手們支招!
為便于理解我建了一個表結(jié)構(gòu)出來:
CREATE TABLE `test_bj` (
`id` int(10) NOT NULL,
`username` char(12) default NULL,
`userpwd` char(16) default NULL,
`sex` int(1) default NULL,
`Position` char(10) default NULL,
`Remarks` char(150) default NULL,
`addtime` timestamp NULL default NULL on update CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `s_id_atm` (`id`,`addtime`),
KEY `s_all` (`id`,`username`,`userpwd`,`sex`,`Position`,`Remarks`,`addtime`)
) ENGINE=MyISAM DEFAULT CHARSET=gb2312;
字段分別為:id , username , usrepwd , sex , position, remarks, addtime (字段可根據(jù)優(yōu)化需要再建或修改)
表名:test_bj,test_sh .... test_gz... test_n (假設(shè)每張有1千萬記錄)
每個表名 很想以地區(qū)單獨分開(不想建分區(qū)表),這樣方便查看和單獨查詢
還說明一點
select id,username,sex,addtime from
(
select id,username,sex,addtime from test_bj where username like '%張%' and sex=1
union all
select id,username,sex,addtime from test_sh where username like '%張%' and sex=1
union all
...
select id,username,sex,addtime from test_gz where username like '%張%' and sex=1
) order by addtime desc limit0,20
這種多表聯(lián)合查詢基本處于死機狀態(tài) , 這查詢代碼該如何寫?
朋友們以上問題給我支個招吧!大家一起總結(jié)下,對后來者都是一個幫助!在此拜謝了!
不要拷貝、復制,最好給出實例代碼和配置步驟
答:
首先要說的是創(chuàng)建索引會提高搜索速度
再就是 like 不會使用索引,結(jié)果就是你創(chuàng)建了索引但是找不到結(jié)果,這個和union沒有關(guān)系
即使你單獨一條查詢也是遍歷整個數(shù)據(jù)庫,不會在索引中查詢
對于這種情況一般都是通過分詞創(chuàng)建文件索引的方式進行文字查詢 如 lucene
現(xiàn)在的數(shù)據(jù)量,想要通過sql解決文字的like查詢,通過數(shù)據(jù)庫已經(jīng)不夠用的了~
追問:
多謝你的回答,我以上提的問題,Mysql有沒有其它解決辦法?表可多個,要聯(lián)合查詢,或者只能用分區(qū)表來做嗎?還是像一個朋友說的 運用hash算法對同樣結(jié)構(gòu)的表進行計算分類后存入新表?
回答:
不論你怎么分表 只要使用like 索引就不會起作用 最后的結(jié)果還是所有的數(shù)據(jù)都要遍歷一遍你可以看看 Mysql+sphinx 做的搜索,對于大數(shù)據(jù)量的查詢使用比較多單獨使用數(shù)據(jù)庫很難,我找過通過創(chuàng)建mysql分詞索引的方式搜索數(shù)據(jù),結(jié)果會丟失很多數(shù)據(jù),結(jié)果也不準確,畢竟查詢還是以準確為第一位的你可以看看京東或者當當之類的,你輸入了一個字他會自動匹配出結(jié)果數(shù)和數(shù)據(jù)量,這個就是分詞索引的結(jié)果
|