电竞比分网-中国电竞赛事及体育赛事平台

分享

mysql 千萬級數(shù)據(jù)庫如何進行多張結(jié)構(gòu)相同的表聯(lián)合查詢?如何優(yōu)化或設(shè)置提高查詢速度?

 橙zc 2015-04-28

問:

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é)果

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多