首用MYSQL索引

2021-04-15 13:16:44 字數 1782 閱讀 9746

mysql百萬記錄效率問題解決了。。心情舒暢,特上來講一篇為初學者作貢獻。

用了mysql一年多,且一直被mysql的快速查詢所吸引,可今天怎麼碰石頭了?

原來就是索引在做怪。由於本人是業餘愛好自學php+mysql開發,所以在理論優化方面一般考慮甚少,基本不用字段索引去做mysql優化,可能也是我不會用吧。(總看書上說索引的好處好處的,今天著實嚐到甜頭了。)

講講經過:

根據程式邏輯需要,我得用php反覆去操作這個百萬條資料表3-4次,其中有select和update(update的時候需要去生成乙個文字檔案),delete(delete的時候需要去把這個檔案刪除),但把程式邏輯封裝,測試程式時,操作後確實讓人心痛了,甚至有準備上乙個sql server去測試效率問題的念頭。最後經技術總監點了一下,說讓把程式每段加個執行時間再看看。我照做,在update這一塊去進行測試,發現問題並不是在這個百萬條資料表上,我就把另一段生成檔案文字檔案的程式拿掉,測試一切正常,一次update300條記錄時間在0.08秒左右就操作完了。本以為問題是出在生成文字檔案上,且在sql語句上不存在問題,我想即是與mysql無關,就把另一段寫檔案檔案的操作拿掉了先。

接著我再測試delete部分是不是也存在著這個問題,最後我按上面的步驟同樣也把刪除檔案的一部分程式拿掉了先,再看測試時間,發現問題依然存在,鬱悶了一會,繼續測試這段**。這段**是乙個表關聯操作(先查詢後刪除),測試發現這個關聯操作花了7秒鐘時間。我想,乙個乙個拆開試,其中我又拆分測試,把刪除的sql語句部分拿掉,再看查詢部分的時間測試,結果僅查詢部分花去了5秒。我就發現問題肯定是出在了查詢語句上了。

我敢肯定問題出在查詢語句上了後,我就直接到mysql-front上去做個查詢測試,在這個百萬條記錄裡去查詢一條符合條件的記錄試試。結果不出所料,查詢結果是一條記錄,卻花了4.76秒時間。我心想:不是吧,這就是傳說中的快速查詢的mysql??我開始回憶了,以前看書的時候mysql優化等內容。突然想到索引?立刻為乙個經常需要where的字段建立了乙個索引,然後同樣的sql語句再做測試,這次僅只花了0.04秒。頓時頭腦清醒了一會,罰自己臉紅了3分鐘。

由於我的程式一般都上千條記錄,就沒有為查詢效率問題考慮太多,所以我的確也不知道索引的好處,也一直都是不屑於用索引的,但這次我一試,我發現我錯了,我真的錯了,錯得非常厲害,索引這麼好的功能卻一直被我拋之腦後。

講講索引後的探索:

我發現我在建立索引的時候,竟然花了10幾秒鐘,我心想,乙個索引還不至於吧,建立乙個索引mysql伺服器的響應時間怎麼這麼長?我就又跟著我的好奇心想了想,是不是由於記錄數多了的原因?難道建立索引是把所有記錄的這個欄位都寫到某個地方了?想到這裡,我的滑鼠非常靈活的幫我進入到了mysql 資料資料夾(data)裡面相對應的庫相對應的這個百萬條記錄的表的三個檔案其中有(xx.myi,xx.myd,xx.frm),以前我知道其中有乙個是放資料的,另外兩個其中有乙個是表的結構,還有乙個確實不知道是什麼,因為大小也一直和表結構檔案一樣都是40k左右。但今天我知道了,是放表索引的。我剛才建立了乙個百萬條記錄索引後這個檔案一下漲到了11m。

再想想mysql表副檔名:

frm是不是就是frame(結構);

myi,其中的i是不是就是index(索引);

,其中的d是不是就是data(資料);

我想沒有比這更好的解釋了吧?

最後根據以上分析後,再一次偶然的操作發現,update比原來慢了至少一倍。所以說天下還真沒有免費的午餐啊。不過相比於select來說,update的效率損失一點完全可以忽略不計,因為select的效率可提高了將近100倍啊。

首用MYSQL索引的快感

用了mysql一年多,且一直被mysql的快速查詢所吸引,可今天怎麼碰石頭了?1dp4v w t0 3p on3ip1bc0 由於我的程式一般都上千條記錄,就沒有為查詢效率問題考慮太多,所以我的確也不知道索引的好處,也一直都是不屑於用索引的,但這次我一試,我發現我錯了,我真的錯了,錯得非常厲害,索引...

MySQL 復合索引該怎麼用

本文均已學習為主,不考慮實際業務。若在實際業務中,還需考慮增刪改的代價和實際需要。資料量大,查詢業務多的 where從句 group by從句 order by從句 on從句 中的字段,可以考慮建索引。alter table t add index abc a,b,c 這裡有乙個原則 離散度大的列放...

mysql索引怎麼用 mysql怎麼使用索引?

在排序操作中如果能使用到索引來排序,那麼可以極大的提高排序的速度,要使用索引來排序需要滿足以下兩點即可。1 order by子句後的列順序要與組合索引的列順序一致,且所有排序列的排序方向 正序 倒序 需一致 2 所查詢的字段值需要包含在索引列中,及滿足覆蓋索引。通過例子來具體分析 在user tes...