《Mysql學(xué)習(xí)MySQL索引用法實(shí)例分析》要點(diǎn):
本文介紹了Mysql學(xué)習(xí)MySQL索引用法實(shí)例分析,希望對您有用。如果有疑問,可以聯(lián)系我們。
本文實(shí)例分析了MySQL索引用法.分享給大家供大家參考,具體如下:MYSQL應(yīng)用
MYSQL描述:MYSQL應(yīng)用
一個(gè)文章庫,里面有兩個(gè)表:category和article.category里面有10條分類數(shù)據(jù).article里面有20萬條.article里面有一個(gè)"article_category"字段是與category里的"category_id"字段相對應(yīng)的.article表里面已經(jīng)把 article_category字義為了索引.數(shù)據(jù)庫大小為1.3G.MYSQL應(yīng)用
問題描述:MYSQL應(yīng)用
執(zhí)行一個(gè)很普通的查詢:
MYSQL應(yīng)用
辦理方案:MYSQL應(yīng)用
建一個(gè)索引:MYSQL應(yīng)用
繼續(xù)問題:
MYSQL應(yīng)用
使用OR:MYSQL應(yīng)用
select * from article where article_category=2 or article_category=3 order by article_id desc limit 5
執(zhí)行時(shí)間:11.0777MYSQL應(yīng)用
辦理方案:避免使用in 或者 or (or會導(dǎo)致掃表),使用union allMYSQL應(yīng)用
使用UNION ALL:MYSQL應(yīng)用
(select * from article where article_category=2 order by article_id desc limit 5) UNION ALL (select * from article where article_category=3 order by article_id desc limit 5) ORDER BY article_id desc limit 5
執(zhí)行時(shí)間:0.0261MYSQL應(yīng)用
注:UNION 和UNION ALL 的區(qū)別MYSQL應(yīng)用
在數(shù)據(jù)庫中,UNION和UNION ALL關(guān)鍵字都是將兩個(gè)結(jié)果集合并為一個(gè),但這兩者從使用和效率上來說都有所不同.MYSQL應(yīng)用
UNION在進(jìn)行表鏈接后會篩選掉重復(fù)的記錄,所以在表鏈接后會對所產(chǎn)生的結(jié)果集進(jìn)行排序運(yùn)算,刪除重復(fù)的記錄再返回結(jié)果.MYSQL應(yīng)用
實(shí)際大部分應(yīng)用中是不會產(chǎn)生重復(fù)的記錄,最常見的是過程表與歷史表UNION.如:MYSQL應(yīng)用
select * from gc_dfys union select * from ls_jg_dfys
這個(gè)SQL在運(yùn)行時(shí)先取出兩個(gè)表的結(jié)果,再用排序空間進(jìn)行排序刪除重復(fù)的記錄,最后返回結(jié)果集,如果表數(shù)據(jù)量大的話可能會導(dǎo)致用磁盤進(jìn)行排序.MYSQL應(yīng)用
而UNION ALL只是簡單的將兩個(gè)結(jié)果合并后就返回.這樣,如果返回的兩個(gè)結(jié)果集中有重復(fù)的數(shù)據(jù),那么返回的結(jié)果集就會包含重復(fù)的數(shù)據(jù)了.MYSQL應(yīng)用
從效率上說,UNION ALL 要比UNION快很多,所以,如果可以確認(rèn)合并的兩個(gè)結(jié)果集中不包含重復(fù)的數(shù)據(jù)的話,那么就使用UNION ALL,如下:MYSQL應(yīng)用
select * from gc_dfys union all select * from ls_jg_dfys
注:mysql中union all的order by問題MYSQL應(yīng)用
今天寫mysql數(shù)據(jù)庫代碼的時(shí)候,發(fā)現(xiàn)union的結(jié)果不是預(yù)期的MYSQL應(yīng)用
$stime = date("H:i:s"); $sql1 = "select * from T where '$stime'>stime order by stime desc"; $sql2 = "select * from T where stime>'$stime' order by stime asc"; $sql = "($sql) union all ($sql2)";
分別執(zhí)行$sql1 和 $sql2 的時(shí)候結(jié)果是對的MYSQL應(yīng)用
但是執(zhí)行$sql的時(shí)候,發(fā)現(xiàn)結(jié)果反了,$sql1的部分變升序,$sql2的部分變成降序MYSQL應(yīng)用
搜索也沒有得到滿意的答案,好像有些數(shù)據(jù)庫還是不支持字句order by 的MYSQL應(yīng)用
無意中發(fā)現(xiàn)這樣可以:
MYSQL應(yīng)用
更多關(guān)于MySQL相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《MySQL索引操作技巧匯總》、《MySQL日志操作技巧大全》、《MySQL事務(wù)操作技巧匯總》、《MySQL存儲過程技巧大全》、《MySQL數(shù)據(jù)庫鎖相關(guān)技巧匯總》及《MySQL常用函數(shù)大匯總》MYSQL應(yīng)用
希望本文所述對大家MySQL數(shù)據(jù)庫計(jì)有所贊助.MYSQL應(yīng)用
維易PHP培訓(xùn)學(xué)院每天發(fā)布《Mysql學(xué)習(xí)MySQL索引用法實(shí)例分析》等實(shí)戰(zhàn)技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養(yǎng)人才。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/9851.html