程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL 結合索引與Where子句的優化 進步數據庫運轉效力

MySQL 結合索引與Where子句的優化 進步數據庫運轉效力

編輯:MySQL綜合教程

MySQL 結合索引與Where子句的優化 進步數據庫運轉效力。本站提示廣大學習愛好者:(MySQL 結合索引與Where子句的優化 進步數據庫運轉效力)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL 結合索引與Where子句的優化 進步數據庫運轉效力正文


網站體系上線至今,數據量曾經不知不覺上到500M,近8W記載了。觸及數據庫操作的根本都是變得很慢了,用的人都邑認為躁火~~然後把這個情形在群裡一貼,包含機械設置裝備擺設甚麼的一說,立時就有群友發話了,並且幫我肯定了不是機械設置裝備擺設的成績,“深圳-槍手”熱情人他的機械512內存過百W的數據裡也跑得飛快,乃至跟那些幾W塊的機械一樣牛(吹過火了),呵呵~~~

  在群友的剖析指導下,測驗考試把排序、前提等一個一個去除來做測試,成果發明成績就出在排序部門,去除排序的時刻,履行時光由本來的48秒釀成0.3x秒,這是個甚麼層次的變更呀~~看著這個成果我沖動ing.....

  因而我把觸及排序的字段構成一個結合索引alter table xx add index indexname(x1,x2,x3),經由2分鐘創立新索引以後再履行統一個SQL語句,哇塞0.28S。。。。爽

  因而依照異樣的思緒把其它幾個經常使用的SQL作了過些優化,後果立時奏效

  過了30分鐘再查slow sql記載文件,欠好了,發明本來一個好好的SQL變得灰常慢了,神馬情形?

  幾經剖析和測試本來就是由於添加了結合索引的緣由,並且這個SQL語句傍邊有個or,當把這個or改用union以後成績消除。

  這回又得出一個心得:寫SQL的時刻萬萬別一時就手,隨意寫個就OK,那會為認為帶來很嚴重的效果。

  再附上一段關於Where子句的履行次序:

  在用MySQL查詢數據庫的時刻,銜接了許多個用,發明異常慢。例如:

  SELECT ... WHERE p.languages_id = 1 AND m.languages_id = 1 AND c.languages_id = 1 AND t.languages_id = 1 AND p.products_id IN (472,474)

  如許查詢須要20多秒,固然在各個字段上都樹立了索引。用剖析Explain SQL一剖析,發明在第一次剖析進程中就前往了幾萬條數據:

  WHERE p.languages_id = 1 ,然後再順次依據前提,減少規模。

  而我轉變一下WHERE 字段的地位以後,速度就有了顯著地進步:

  WHERE p.products_id IN (472,474) AND p.languages_id = 1 AND m.languages_id = 1 AND c.languages_id = 1 AND t.languages_id = 1

  如許,第一次的前提是p.products_id IN (472,474),它前往的成果只要不到10條,接上去還要依據其它的前提來過濾,天然在速度上有了較年夜的晉升。

  經由理論發明,不要認為WHERE中的字段次序無所謂,可以隨意放在哪,應當盡量地第一次就過濾失落年夜部門無用的數據,只前往最小規模的數據。

  願望能幫到有異樣遭受的同伙。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved