日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

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

 橙zc 2015-04-28

問:

1. 現(xiàn)有近億條記錄數(shù)據(jù),分成N個(gè)表進(jìn)行存儲(chǔ);當(dāng)然這N個(gè)表結(jié)構(gòu)都一樣,如何才能提高這N表的聯(lián)合查詢?表都建了索引;  

我在一個(gè)上百萬的表上進(jìn)行單表查詢時(shí)間幾乎為0,但幾個(gè)同樣的表進(jìn)行聯(lián)合查詢,結(jié)果處于假死狀態(tài),請(qǐng)問有什么機(jī)制可以

提高這N個(gè)表的聯(lián)合查詢速度?

2.如何請(qǐng)?zhí)岣咂渌?結(jié)合 這N幾個(gè)表進(jìn)行查詢?我覺得同結(jié)構(gòu)表結(jié)合查詢就很慢,再結(jié)合其它不同結(jié)構(gòu)表 會(huì)更麻煩些,請(qǐng)高

手們支招!

為便于理解我建了一個(gè)表結(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千萬記錄)
每個(gè)表名 很想以地區(qū)單獨(dú)分開(不想建分區(qū)表),這樣方便查看和單獨(dú)查詢

還說明一點(diǎn)
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)合查詢基本處于死機(jī)狀態(tài) , 這查詢代碼該如何寫?

朋友們以上問題給我支個(gè)招吧!大家一起總結(jié)下,對(duì)后來者都是一個(gè)幫助!在此拜謝了!
不要拷貝、復(fù)制,最好給出實(shí)例代碼和配置步驟
答:

首先要說的是創(chuàng)建索引會(huì)提高搜索速度
再就是 like 不會(huì)使用索引,結(jié)果就是你創(chuàng)建了索引但是找不到結(jié)果,這個(gè)和union沒有關(guān)系
即使你單獨(dú)一條查詢也是遍歷整個(gè)數(shù)據(jù)庫,不會(huì)在索引中查詢
對(duì)于這種情況一般都是通過分詞創(chuàng)建文件索引的方式進(jìn)行文字查詢 如 lucene
現(xiàn)在的數(shù)據(jù)量,想要通過sql解決文字的like查詢,通過數(shù)據(jù)庫已經(jīng)不夠用的了~
 
追問:
多謝你的回答,我以上提的問題,Mysql有沒有其它解決辦法?表可多個(gè),要聯(lián)合查詢,或者只能用分區(qū)表來做嗎?還是像一個(gè)朋友說的 運(yùn)用hash算法對(duì)同樣結(jié)構(gòu)的表進(jìn)行計(jì)算分類后存入新表?
 
回答:
不論你怎么分表 只要使用like 索引就不會(huì)起作用 最后的結(jié)果還是所有的數(shù)據(jù)都要遍歷一遍你可以看看 Mysql+sphinx 做的搜索,對(duì)于大數(shù)據(jù)量的查詢使用比較多單獨(dú)使用數(shù)據(jù)庫很難,我找過通過創(chuàng)建mysql分詞索引的方式搜索數(shù)據(jù),結(jié)果會(huì)丟失很多數(shù)據(jù),結(jié)果也不準(zhǔn)確,畢竟查詢還是以準(zhǔn)確為第一位的你可以看看京東或者當(dāng)當(dāng)之類的,你輸入了一個(gè)字他會(huì)自動(dòng)匹配出結(jié)果數(shù)和數(shù)據(jù)量,這個(gè)就是分詞索引的結(jié)果

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

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多