首頁 資料庫 mysql教程 讓資料庫變快的建議

讓資料庫變快的建議

Dec 03, 2016 am 10:35 AM

大多數網站的內容都存在資料庫裡,使用者透過請求來存取內容。資料庫非常的快,有許多技巧能讓你優化資料庫的速度,使你不浪費伺服器的資源。在這篇文章中,我收錄了十個優化資料庫速度的技巧。

  1、小心設計資料庫

  第一個技巧也許看來理所當然,但事實上大部分資料庫的問題都來自於設計不好的資料庫結構。

  譬如我曾經遇見過將客戶端資訊和支付資訊儲存在同一個資料庫列中的例子。對於系統和用資料庫的開發者來說,這很糟糕。

  新建資料庫時,應將資訊儲存在不同的表裡,採用標準的命名方式,並採用主鍵。

  來源: http://www.simple-talk.com/sql/database-administration/ten-common-database-design-mistakes/

  2、清楚你需要優化的地方

  2、清楚你需要最佳化的地方

   查詢語句,清楚的知道這個語句的結果是非常有幫助的。採用EXPLAIN語句,你將獲得很多有用的信息,下面來看個例子:

 EXPLAIN SELECT * FROM ref_table,other_table WHERE ref_table.key_column=other_table.column;
登入後複製

  來源: http://dev.mysql.com/doc/refman/5.0/en/using-explain.html

  3、最快的查詢語句…是那些你沒發送的語句

  每次你向資料庫發送一條語句,你都會用掉很多伺服器資源。所以在很高流量的網站中,最好的方法就是將你的查詢語句快取起來。

  有許多種緩存語句的方法,下面列出了幾個:

   AdoDB: AdoDB是一個PHP的資料庫簡化函式庫。使用它,你可以選用不同的資料庫系統(MySQL, PostGreSQL, Interbase等等),而且它就是為了速度而設計的。 AdoDB提供了簡單但強大的快取系統。還有,AdoDB擁有BSD許可,你可以在你的專案中免費使用它。對於商業化的項目,它也有LGPL許可。

   Memcached:Memcached是一種分散式記憶體快取系統,它可以減輕資料庫的負載,來加速基於動態資料庫的網站。

   CSQL Cache: CSQL快取是一個開源的資料快取架構。我沒有試過它,但它看起來非常的棒。

  4、不要select你不需要的

  獲取想要的數據,一種非常常見的方式就是採用*字符,這會列出所有的列。

 SELECT * FROM wp_posts;
登入後複製

  然而,你應該只列出你需要的列,如下所示。如果在一個非常小型的網站,譬如,一分鐘一個用戶訪問,可能沒有什麼分別。然而如果像Cats Who Code這樣大流量的網站,這就為資料庫省了很多事。

 SELECT title, excerpt, author FROM wp_posts;
登入後複製

  5、採用LIMIT

  僅獲得某個特定行數的資料是非常常見的。譬如部落格每頁只顯示十篇文章。這時,你應該使用LIMIT,來限定你想要選取的資料的行數。

  如果沒有LIMIT,表有100,000行數據,你將會遍歷所有的行數,這對於伺服器來說是不必要的負擔。

  SELECT title, excerpt, author FROM wp_posts LIMIT 10;
登入後複製

  6、避免循環中的查詢

  當在PHP中使用SQL時,可以將SQL放在循環語句中。但這麼做給你的資料庫增加了負擔。

  下面的例子說明了「在循環語句中嵌套查詢語句」的問題:

   foreach ($display_order as $id => $ordinal){     
          $sql = "UPDATE categories SET display_order = $ordinal WHERE id = $id";
          mysql_query($sql); 
      }
登入後複製

  你可以這麼做:

   UPDATE categories
         SET display_order = CASE id 
             WHEN 1 THEN 3
             WHEN 2 THEN 4
             WHEN 3 THEN 5    
      END WHERE id IN (1,2,3)
登入後複製

  來源: http://www.karlrixon. -multiple-rows-with-different-values-and-a-single-sql-query/

  7、採用join來替換子查詢

  程式設計師可能會喜歡用子查詢,甚至濫用。下面的子查詢非常有用:

 SELECT a.id,
            (SELECT MAX(created)
             FROM posts
             WHERE author_id = a.id) 
      AS latest_post FROM authors a
登入後複製

  雖然子查詢很有用,但join語句可以取代它,join語句執行起來更快。

  SELECT a.id, MAX(p.created) AS latest_post
      FROM authors a
      INNER JOIN posts p
         ON (a.id = p.author_id)
      GROUP BY a.id
登入後複製

  來源: http://20bits.com/articles/10-tips-for-optimizing-mysql-queries-that-dont-suck/

  8、小心使用通配符🀎的時候可以用通配符來取代一個或多個字元。我不是說不能用,而是,應該小心使用,並且不要使用全詞通配符(full wildcard),前綴通配符或後置通配符可以完成相同的任務。

  事實上,在百萬數量級的資料上採用全詞通配符來搜尋會讓你的資料庫當機。

#Full wildcard 
      SELECT * FROM TABLE WHERE COLUMN LIKE '%hello%'; 
      #Postfix wildcard 
      SELECT * FROM TABLE WHERE COLUMN LIKE 'hello%'; 
      #Prefix wildcard 
      SELECT * FROM TABLE WHERE COLUMN LIKE '%hello';
登入後複製

  來源: http://hungred.com/useful-information/ways-optimize-sql-queries/

  9、採用UNION來代替元你可以將2個或更多select語句的結果拼在一起。下面的例子回傳的結果同上面的一樣,但是速度要快些:

  SELECT * FROM a, b WHERE a.p = b.q or a.x = b.y;
登入後複製

  來源: http://www.bcarter.com/optimsql.htm

  10、使用索引

  資料庫索引和你在圖書館中見到的索引類似:能讓你更快速的獲取想要的信息,正如圖書館中的索引能讓讀者更快的找到想要的書一樣。

  可以在一个列上创建索引,也可以在多个列上创建。索引是一种数据结构,它将表中的一列或多列的值以特定的顺序组织起来。

  下面的语句在Product表的Model列上创建索引。这个索引的名字叫作idxModel

   CREATE INDEX idxModel ON Product (Model);
登入後複製

  来源: http://www.sql-tutorial.com/sql-indexes-sql-tutorial/


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Go語言如何實作資料庫的增刪改查操作? Go語言如何實作資料庫的增刪改查操作? Mar 27, 2024 pm 09:39 PM

Go語言是一種高效、簡潔且易於學習的程式語言,因其在並發程式設計和網路程式設計方面的優勢而備受開發者青睞。在實際開發中,資料庫操作是不可或缺的一部分,本文將介紹如何使用Go語言實作資料庫的增刪改查操作。在Go語言中,我們通常會使用第三方函式庫來操作資料庫,例如常用的sql套件、gorm等。這裡以sql包為例介紹如何實作資料庫的增刪改查操作。假設我們使用的是MySQL資料庫。

iOS 18 新增「已復原」相簿功能 可找回遺失或損壞的照片 iOS 18 新增「已復原」相簿功能 可找回遺失或損壞的照片 Jul 18, 2024 am 05:48 AM

蘋果公司最新發布的iOS18、iPadOS18以及macOSSequoia系統為Photos應用程式增添了一項重要功能,旨在幫助用戶輕鬆恢復因各種原因遺失或損壞的照片和影片。這項新功能在Photos應用的"工具"部分引入了一個名為"已恢復"的相冊,當用戶設備中存在未納入其照片庫的圖片或影片時,該相冊將自動顯示。 "已恢復"相簿的出現為因資料庫損壞、相機應用未正確保存至照片庫或第三方應用管理照片庫時照片和視頻丟失提供了解決方案。使用者只需簡單幾步

Hibernate 如何實作多型映射? Hibernate 如何實作多型映射? Apr 17, 2024 pm 12:09 PM

Hibernate多態映射可映射繼承類別到資料庫,提供以下映射類型:joined-subclass:為子類別建立單獨表,包含父類別所有欄位。 table-per-class:為子類別建立單獨資料表,僅包含子類別特有列。 union-subclass:類似joined-subclass,但父類別表聯合所有子類別列。

在PHP中使用MySQLi建立資料庫連線的詳盡教學 在PHP中使用MySQLi建立資料庫連線的詳盡教學 Jun 04, 2024 pm 01:42 PM

如何在PHP中使用MySQLi建立資料庫連線:包含MySQLi擴充(require_once)建立連線函數(functionconnect_to_db)呼叫連線函數($conn=connect_to_db())執行查詢($result=$conn->query())關閉連線( $conn->close())

如何在PHP中處理資料庫連線錯誤 如何在PHP中處理資料庫連線錯誤 Jun 05, 2024 pm 02:16 PM

PHP處理資料庫連線報錯,可以使用下列步驟:使用mysqli_connect_errno()取得錯誤代碼。使用mysqli_connect_error()取得錯誤訊息。透過擷取並記錄這些錯誤訊息,可以輕鬆識別並解決資料庫連接問題,確保應用程式的順暢運作。

深入解析HTML如何讀取資料庫 深入解析HTML如何讀取資料庫 Apr 09, 2024 pm 12:36 PM

HTML無法直接讀取資料庫,但可以透過JavaScript和AJAX實作。其步驟包括建立資料庫連線、發送查詢、處理回應和更新頁面。本文提供了利用JavaScript、AJAX和PHP來從MySQL資料庫讀取資料的實戰範例,展示如何在HTML頁面中動態顯示查詢結果。此範例使用XMLHttpRequest建立資料庫連接,發送查詢並處理回應,從而將資料填入頁面元素中,實現了HTML讀取資料庫的功能。

PHP處理資料庫中文亂碼的技巧與實踐 PHP處理資料庫中文亂碼的技巧與實踐 Mar 27, 2024 pm 05:21 PM

PHP是一種廣泛應用於網站開發的後端程式語言,它具有強大的資料庫操作功能,常用於與MySQL等資料庫進行互動。然而,由於中文字元編碼的複雜性,在處理資料庫中文亂碼時常常會出現問題。本文將介紹PHP處理資料庫中文亂碼的技巧與實踐,包括常見的亂碼原因、解決方法和具體的程式碼範例。常見的亂碼原因資料庫字元集設定不正確:資料庫建立時需選擇正確的字元集,如utf8或u

如何用 Golang 連接遠端資料庫? 如何用 Golang 連接遠端資料庫? Jun 01, 2024 pm 08:31 PM

透過Go標準庫database/sql包,可以連接到MySQL、PostgreSQL或SQLite等遠端資料庫:建立包含資料庫連接資訊的連接字串。使用sql.Open()函數開啟資料庫連線。執行SQL查詢和插入操作等資料庫操作。使用defer關閉資料庫連線以釋放資源。

See all articles