欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL索引用法實(shí)例分析

 更新時(shí)間:2016年07月19日 10:53:06   作者:miky  
這篇文章主要介紹了MySQL索引用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了mysql索引的功能、定義、使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例分析了MySQL索引用法。分享給大家供大家參考,具體如下:

MYSQL描述:

一個(gè)文章庫(kù),里面有兩個(gè)表:category和article。category里面有10條分類(lèi)數(shù)據(jù)。article里面有20萬(wàn)條。article里面有一個(gè)"article_category"字段是與category里的"category_id"字段相對(duì)應(yīng)的。article表里面已經(jīng)把 article_category字義為了索引。數(shù)據(jù)庫(kù)大小為1.3G。

問(wèn)題描述:

執(zhí)行一個(gè)很普通的查詢:

復(fù)制代碼 代碼如下:
SELECT * FROM `article` WHERE article_category=11 ORDER BY article_id DESC LIMIT 5
執(zhí)行時(shí)間大約要5秒左右

解決方案:

建一個(gè)索引:

復(fù)制代碼 代碼如下:
create index idx_u on article (article_category,article_id);

復(fù)制代碼 代碼如下:
SELECT * FROM `article` WHERE article_category=11 ORDER BY article_id DESC LIMIT 5
減少到0.0027秒

繼續(xù)問(wèn)題:

復(fù)制代碼 代碼如下:
SELECT * FROM `article` WHERE article_category IN (2,3) ORDER BY article_id DESC LIMIT 5
執(zhí)行時(shí)間要11.2850秒。

使用OR:

select * from article
where article_category=2
or article_category=3
order by article_id desc
limit 5

執(zhí)行時(shí)間:11.0777

解決方案:避免使用in 或者 or (or會(huì)導(dǎo)致掃表),使用union all

使用UNION ALL:

(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.0261

注:UNION 和UNION ALL 的區(qū)別

在數(shù)據(jù)庫(kù)中,UNION和UNION ALL關(guān)鍵字都是將兩個(gè)結(jié)果集合并為一個(gè),但這兩者從使用和效率上來(lái)說(shuō)都有所不同。

UNION在進(jìn)行表鏈接后會(huì)篩選掉重復(fù)的記錄,所以在表鏈接后會(huì)對(duì)所產(chǎn)生的結(jié)果集進(jìn)行排序運(yùn)算,刪除重復(fù)的記錄再返回結(jié)果。

實(shí)際大部分應(yīng)用中是不會(huì)產(chǎn)生重復(fù)的記錄,最常見(jiàn)的是過(guò)程表與歷史表UNION。如:

select * from gc_dfys union select * from ls_jg_dfys

這個(gè)SQL在運(yùn)行時(shí)先取出兩個(gè)表的結(jié)果,再用排序空間進(jìn)行排序刪除重復(fù)的記錄,最后返回結(jié)果集,如果表數(shù)據(jù)量大的話可能會(huì)導(dǎo)致用磁盤(pán)進(jìn)行排序。

而UNION ALL只是簡(jiǎn)單的將兩個(gè)結(jié)果合并后就返回。這樣,如果返回的兩個(gè)結(jié)果集中有重復(fù)的數(shù)據(jù),那么返回的結(jié)果集就會(huì)包含重復(fù)的數(shù)據(jù)了。

從效率上說(shuō),UNION ALL 要比UNION快很多,所以,如果可以確認(rèn)合并的兩個(gè)結(jié)果集中不包含重復(fù)的數(shù)據(jù)的話,那么就使用UNION ALL,如下:

select * from gc_dfys union all select * from ls_jg_dfys

注:mysql中union all的order by問(wèn)題

今天寫(xiě)mysql數(shù)據(jù)庫(kù)代碼的時(shí)候,發(fā)現(xiàn)union的結(jié)果不是預(yù)期的

$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é)果是對(duì)的

但是執(zhí)行$sql的時(shí)候,發(fā)現(xiàn)結(jié)果反了,$sql1的部分變升序,$sql2的部分變成降序

搜索也沒(méi)有得到滿意的答案,好像有些數(shù)據(jù)庫(kù)還是不支持字句order by 的

無(wú)意中發(fā)現(xiàn)這樣可以:

復(fù)制代碼 代碼如下:
$sql = "select * from ($sql1) as temp1 union all select * from ($sql2) as temp2";

這是因?yàn)槟愕膗nion的用法不正確的原因。在union操作中,order by語(yǔ)句不能出現(xiàn)在由union操作組合的兩個(gè)select語(yǔ)句中。排序可以通過(guò)在第二個(gè)select語(yǔ)句后指定order by子句。

更多關(guān)于MySQL相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《MySQL索引操作技巧匯總》、《MySQL日志操作技巧大全》、《MySQL事務(wù)操作技巧匯總》、《MySQL存儲(chǔ)過(guò)程技巧大全》、《MySQL數(shù)據(jù)庫(kù)鎖相關(guān)技巧匯總》及《MySQL常用函數(shù)大匯總

希望本文所述對(duì)大家MySQL數(shù)據(jù)庫(kù)計(jì)有所幫助。

相關(guān)文章

  • 有關(guān)mysql中ROW_COUNT()的小例子

    有關(guān)mysql中ROW_COUNT()的小例子

    mysql中的ROW_COUNT()可以返回前一個(gè)SQL進(jìn)行UPDATE,DELETE,INSERT操作所影響的行數(shù)
    2013-02-02
  • ubuntu安裝mysql數(shù)據(jù)庫(kù)方法

    ubuntu安裝mysql數(shù)據(jù)庫(kù)方法

    ubuntu基于linux的免費(fèi)開(kāi)源桌面PC操作系統(tǒng),十分契合英特爾的超極本定位,支持x86、64位和ppc架構(gòu)。這篇文章給大家介紹ubuntu安裝mysql數(shù)據(jù)庫(kù)方法,非常不錯(cuò),需要的朋友參考下吧
    2019-08-08
  • Mysql 8 新特性 window functions 的作用

    Mysql 8 新特性 window functions 的作用

    MySQL是眾多網(wǎng)站技術(shù)棧中的標(biāo)準(zhǔn)配置,是廣受歡迎的開(kāi)源數(shù)據(jù)庫(kù),已經(jīng)推出了8.0的第一個(gè)候選發(fā)行版本。接下來(lái)通過(guò)本文給大家分享Mysql 8 新特性 window functions 的作用,需要的朋友參考下吧
    2017-11-11
  • 創(chuàng)建mysql表分區(qū)的方法

    創(chuàng)建mysql表分區(qū)的方法

    我來(lái)給大家介紹一下mysql表分區(qū)創(chuàng)建與使用吧,希望對(duì)各位同學(xué)會(huì)有所幫助。表分區(qū)的測(cè)試使用,主要內(nèi)容來(lái)自于其他博客文章以及mysql5.1的參考手冊(cè)。
    2013-10-10
  • MySQL自帶慢日志排查慢查詢SQL

    MySQL自帶慢日志排查慢查詢SQL

    昨天有一道筆試題是問(wèn)mysql慢查詢的,總結(jié)一下,下面這篇文章主要給大家介紹了關(guān)于MySQL如何利用自帶慢日志排查慢查詢SQL的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • Win10下mysql 8.0.15 安裝配置方法圖文教程

    Win10下mysql 8.0.15 安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了Win10下mysql 8.0.15 安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • MySQL定時(shí)刪除XX天數(shù)據(jù)示例代碼

    MySQL定時(shí)刪除XX天數(shù)據(jù)示例代碼

    通過(guò)使用MySQL的事件調(diào)度器,我們可以方便地創(chuàng)建定時(shí)任務(wù)來(lái)定期清理數(shù)據(jù)庫(kù)中的過(guò)期數(shù)據(jù),本文介紹了如何創(chuàng)建定時(shí)任務(wù)以及如何刪除3個(gè)月前的數(shù)據(jù)作為示例,感興趣的朋友跟隨小編一起看看吧
    2023-09-09
  • Mysql常見(jiàn)問(wèn)題集錦

    Mysql常見(jiàn)問(wèn)題集錦

    Mysql在使用過(guò)程中難免會(huì)遇到一些問(wèn)題,在本文把常見(jiàn)問(wèn)題做個(gè)記錄方便以后發(fā)現(xiàn)問(wèn)題查看,感興趣的朋友也可以了解下
    2013-09-09
  • Mysql Data目錄和 Binlog 目錄 搬遷的方法

    Mysql Data目錄和 Binlog 目錄 搬遷的方法

    剛開(kāi)始安裝時(shí)使用了默認(rèn)目錄,使用一段時(shí)間,數(shù)據(jù)慢慢變?cè)?,發(fā)現(xiàn)當(dāng)前設(shè)置的目錄空間不夠時(shí),就要搬遷數(shù)據(jù)到另一個(gè)目錄了
    2011-10-10

最新評(píng)論