国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

19個MySQL性能優化要點解析

2024-07-24 12:45:39
字體:
來源:轉載
供稿:網友

以下就是跟大家分享的19個MySQL性能優化主要要點,一起學習學習。

1、為查詢優化你的查詢
大多數的MySQL服務器都開啟了查詢緩存。這是提高性最有效的方法之一,而且這是被MySQL的數據庫引擎處理的。當有很多相同的查詢被執行了多次的時候,這些查詢結果會被放到一個緩存中,這樣,后續的相同的查詢就不用操作表而直接訪問緩存結果了。

這里最主要的問題是,對于程序員來說,這個事情是很容易被忽略的。因為,我們某些查詢語句會讓MySQL不使用緩存。請看下面的示例:

// 查詢緩存不開啟 $r = mysql_query("SELECT username FROM user WHERE signup_date >= CURDATE()"); // 開啟查詢緩存 $today = date("Y-m-d"); $r = mysql_query("SELECT username FROM user WHERE signup_date >= '$today'");

上面兩條SQL語句的差別就是 CURDATE() ,MySQL的查詢緩存對這個函數不起作用。所以,像 NOW() 和 RAND() 或是其它的諸如此類的SQL函數都不會開啟查詢緩存,因為這些函數的返回是會不定的易變的。所以,你所需要的就是用一個變量來代替MySQL的函數,從而開啟緩存。

2、EXPLAIN 你的SELECT查詢
使用EXPLAIN關鍵字可以讓你知道MySQL是如何處理你的SQL語句的。

有表關聯的查詢,如下列:

select username, group_name from users u joins groups g on (u.group_id = g.id)

發現查詢緩慢,然后在group_id字段上增加索引,則會加快查詢

3、當只要一行數據時使用LIMIT 1
當你查詢表的有些時候,你已經知道結果只會有一條結果,單因為你可能需要去fetch游標,或是你也許會去檢查返回的記錄數。

在這種情況下,加上LIMIT 1 可以增加性能。這樣一樣, MySQL數據庫引擎會在找到一條數據后停止搜索,而不是繼續往后查找下一條符合記錄的數據。

下面的示例,只是為了找一下是否有“中國”的用戶,很明顯,后面的會比前面的更有效率。(請注意,第一條中是Select *,第二條是Select 1)

// 沒有效率的: $r = mysql_query("SELECT * FROM user WHERE country = 'China'"); if (mysql_num_rows($r) > 0) { // ... } // 有效率的: $r = mysql_query("SELECT 1 FROM user WHERE country = 'China' LIMIT 1"); if (mysql_num_rows($r) > 0) { // ... }

4、為搜索字段建索引
索引并不一定就是給主鍵或是唯一的字段。如果在你的表中,有某個字段你總要會經常用來做搜索,那么,請為其建立索引吧。

5、在Join表的時候使用相當類型的列,并將其索引
如果你的應用程序有很多JOIN查詢,你應該確認兩個表中Join的字段是被建過索引的。這樣,MySQL內部會啟動為你優化Join的SQL語句的機制。

而且,這些被用來Join的字段,應該是相同的類型的。例如:如果你要把DECIMAL字段和一個INT字段JOIN在一起,MYSQL就無法使用他們的索引。對于那些STRING類型,還需要有相同的字符集才行(兩個表的字符集有可能不一樣)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 富锦市| 临泉县| 仁布县| 扎囊县| 石门县| 康定县| 平潭县| 江门市| 商水县| 绥滨县| 搜索| 会昌县| 荥阳市| 临澧县| 炉霍县| 沙湾县| 内江市| 桐庐县| 英吉沙县| 宾川县| 崇仁县| 永修县| 临西县| 谷城县| 清镇市| 礼泉县| 花莲市| 临海市| 辽源市| 绥棱县| 泰州市| 北宁市| 阿荣旗| 城市| 墨竹工卡县| 上林县| 阳泉市| 土默特右旗| 夹江县| 崇州市| 吴堡县|