成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL數據庫優化SQL語句的步驟4

數據庫 MySQL
我們今天主要和大家描述的是MySQL數據庫優化SQL語句的實際操作的第四步驟,以下就是文章對其實際操作的詳細解說。

以上的文章我們講過MySQL數據庫優化SQL語句的前三步驟,今天我們就和大家一起來講述MySQL數據庫優化SQL語句的實際操作的第四步驟,以下就是文章的具體內容描述,望你在瀏覽之后會有所收獲。

1:索引的使用,索引的重要性就不說了,功能也不說了,只說怎么做. 首先要明確所有的MySQL(和PHP搭配之最佳組合)索引(Prima(最完善的虛擬主機管理系統)ry,unique,index)在b樹中有存儲.索引主要用語:

a:快速找到where指定條件的記錄 b:執行聯結時,從其他表檢索行 c:對特定的索引列找出max()和min()值

d:如果排序或者分組在一個可用鍵的最前面加前綴,排序或分組一個表

e:一個查詢可能被用來MySQL數據庫優化檢索值,而不用訪問數據文件.如果某些表的列是數字型并且正好是某個列的前綴,為了更快,值可以從索引樹中取出

2:存儲或者更新數據的查詢速度  grant的執行會稍稍的減低效率.

MySQL(和PHP搭配之最佳組合)的函數應該被高度的優化.可以用benchmark(loop_count,expression)來找出是否查詢有問題

select的查詢速度:如果想要讓一個select...where...更快,我能想到的只有建立索引.可以在一個表上運行myisamchk--analyze來更好的MySQL數據庫優化查詢.可以用myisamchk--sort-index--sort-records=1來設置用一個索引排序一個索引和數據.

3:MySQL(和PHP搭配之最佳組合)優化where子句

3.1:刪除不必要的括號:

((a AND b) AND c OR (((a AND b) AND (a AND d))))>(a AND b AND c) OR (a AND b AND c AND d)

3.2:使用常數

(ab>5 AND b=c AND a=5

3.3:刪除常數條件

(b>=5 AND b=5) OR (b=6 AND 5=5) OR (b=100 AND 2=3) >b=5 OR b=6

3.4:索引使用的常數表達式僅計算一次

3.5:在一個表中,沒有一個where的count(*)直接從表中檢索信息

3.6:所有常數的表在查詢中在任何其他表之前讀出

3.7:對外聯結表最好聯結組合是嘗試了所有可能性找到的
 

3.8:如果有一個order by字句和一個不同的group by子句或者order by或者group by包含不是來自聯結的第一個表的列,那么創建一個臨時表

3.9:如果使用了sql_small_result,那么msyql使用在內存中的一個表

3.10:每個表的索引給查詢并且使用跨越少于30%的行的索引.

3.11在每個記錄輸出前,跳過不匹配having子句的行

4:MySQL數據庫優化left join

在MySQL(和PHP搭配之最佳組合)中 a left join b按以下方式實現

a:表b依賴于表a 

b:表a依賴于所有用在left join條件的表(除了b)

c:所有left join條件被移到where子句中

d:進行所有的聯結MySQL數據庫優化,除了一個表總是在所有他依賴的表后讀取.如果有一個循環依賴,那么將發生錯誤

e:進行所有的標準的where優化 f:如果在a中有一行匹配where子句,但是在b中沒有任何匹配left join條件,那么,在b中生成的所有設置為NULL的一行

g:如果使用left join來找出某些表中不存在的行并且在where部分有column_name IS NULL測試(column_name為NOT NULL列).那么,MySQL(和PHP搭配之最佳組合)在它已經找到了匹配left join條件的一行后,將停止在更多的行后尋找

5:MySQL數據庫優化limit

a:如果用limit只選擇一行,當MySQL(和PHP搭配之最佳組合)需要掃描整個表時,它的作用相當于索引

b:如果使用limit#與order by,MySQL(和PHP搭配之最佳組合)如果找到了第#行,將結束排序,而不會排序正個表

c:當結合limit#和distinct時,MySQL(和PHP搭配之最佳組合)如果找到了第#行,將停止

d:只要MySQL(和PHP搭配之最佳組合)已經發送了第一個#行到客戶,MySQL(和PHP搭配之最佳組合)將放棄查詢

e:limit 0一直會很快的返回一個空集合.

f:臨時表的大小使用limit#計算需要多少空間來解決查詢

6:MySQL數據庫優化insert

插入一條記錄的是由以下構成:

a:連接(3)

b:發送查詢給服務器(2)

c:分析查詢(2)

d:插入記錄(1*記錄大小)

e:插入索引(1*索引)

f:關閉(1)

以上數字可以看成和總時間成比例

改善插入速度的一些方法:

6.1:如果同時從一個連接插入許多行,使用多個值的insert,這比用多個語句要快

6.2:如果從不同連接插入很多行,使用insert delayed語句速度更快

6.3: 用myisam,如果在表中沒有刪除的行,能在select:s正在運行的同時插入行

6.4: 當從一個文本文件裝載一個表時,用load data infile.這個通常比insert快20 倍
3.6:所有常數的表在查詢中在任何其他表之前讀出

3.7:對外聯結表最好聯結組合是嘗試了所有可能性找到的
 

3.8:如果有一個order by字句和一個不同的group by子句或者order by或者group by包含不是來自聯結的第一個表的列,那么創建一個臨時表

3.9:如果使用了sql_small_result,那么msyql使用在內存中的一個表

3.10:每個表的索引給查詢并且使用跨越少于30%的行的索引.

3.11在每個記錄輸出前,跳過不匹配having子句的行

4:MySQL數據庫優化left join

在MySQL(和PHP搭配之最佳組合)中 a left join b按以下方式實現

a:表b依賴于表a 

b:表a依賴于所有用在left join條件的表(除了b)

c:所有left join條件被移到where子句中

d:進行所有的聯結優化,除了一個表總是在所有他依賴的表后讀取.如果有一個循環依賴,那么將發生錯誤

e:進行所有的標準的where優化 f:如果在a中有一行匹配where子句,但是在b中沒有任何匹配left join條件,那么,在b中生成的所有設置為NULL的一行

g:如果使用left join來找出某些表中不存在的行并且在where部分有column_name IS NULL測試(column_name為NOT NULL列).那么,MySQL(和PHP搭配之最佳組合)在它已經找到了匹配left join條件的一行后,將停止在更多的行后尋找

5:MySQL數據庫優化limit

a:如果用limit只選擇一行,當MySQL(和PHP搭配之最佳組合)需要掃描整個表時,它的作用相當于索引

b:如果使用limit#與order by,MySQL(和PHP搭配之最佳組合)如果找到了第#行,將結束排序,而不會排序正個表

c:當結合limit#和distinct時,MySQL(和PHP搭配之最佳組合)如果找到了第#行,將停止

d:只要MySQL(和PHP搭配之最佳組合)已經發送了第一個#行到客戶,MySQL(和PHP搭配之最佳組合)將放棄查詢

e:limit 0一直會很快的返回一個空集合.

f:臨時表的大小使用limit#計算需要多少空間來解決查詢

6:MySQL數據庫優化insert

插入一條記錄的是由以下構成:

a:連接(3)

b:發送查詢給服務器(2)

c:分析查詢(2)

d:插入記錄(1*記錄大小)

e:插入索引(1*索引)

f:關閉(1)

以上數字可以看成和總時間成比例

改善插入速度的一些方法:

6.1:如果同時從一個連接插入許多行,使用多個值的insert,這比用多個語句要快

6.2:如果從不同連接插入很多行,使用insert delayed語句速度更快

6.3: 用myisam,如果在表中沒有刪除的行,能在select:s正在運行的同時插入行

6.4: 當從一個文本文件裝載一個表時,用load data infile.這個通常比insert快20 倍

6.5:可以鎖定表然后插入--主要的速度差別是在所有insert語句完成后,索引緩沖區僅被存入到硬盤一次.一般與有不同的insert語句那樣多次存入要快.如果能用一個單個語句插入所有的行,鎖定就不需要.鎖定也降低連接的整體時間.但是對某些線程最大等待時間將上升.例如

  1. thread 1 does 1000 inserts  
  2. thread 2,3 and 4 does 1 insert  
  3. thread 5 does 1000 inserts  

如果不使用鎖定,2,3,4將在1和5之前完成.如果使用鎖定,2,3,4,將可能在1和5之后完成.但是整體時間應該快40%.因為insert,update,delete操作在MySQL(和PHP搭配之最佳組合)中是很快的,通過為多于大約5次連續不斷的插入或更新一行的東西加鎖,將獲得更好的整體性能.

如果做很多一行的插入,可以做一個lock tables,偶爾隨后做一個unlock tables(大約每1000行)以允許另外的線程存取表.這仍然將導致獲得好的性能.load data infile對裝載數據仍然是很快的.

為了對load data infile和insert得到一些更快的速度,擴大關鍵字緩沖區.

7優化update的速度

它的速度依賴于被更新數據的大小和被更新索引的數量

使update更快的另一個方法是推遲修改,然后一行一行的做很多修改.如果鎖定表,做一行一行的很多修改比一次做一個快

8MySQL數據庫優化delete速度

刪除一個記錄的時間與索引數量成正比.為了更快的刪除記錄,可以增加索引緩存的大小 從一個表刪除所有行比刪除這個表的大部分要快的多

 【編輯推薦】

  1. MySQL5 master slave安裝配置全過程
  2. MySQL高效分頁查詢的實際操作步驟
  3. MySQL啟動方法與實際操作步驟
  4. MySQL5字符集問題的解決方案
  5. 如何用MySQL搜索索引字段來提高搜索效率
責任編輯:佚名 來源: 博客園
相關推薦

2018-03-30 14:30:10

數據庫SQL語句性能優化

2018-03-30 13:59:22

數據庫SQL語句性能優化

2010-05-11 10:12:50

mysql數據庫sql

2011-03-08 08:49:55

MySQL優化單機

2010-05-12 10:17:59

MySQL數據庫優化

2017-08-31 14:09:26

數據庫MySQLSQL優化

2019-10-08 08:46:59

mysql數據庫SQL

2011-03-03 17:56:52

MySQL數據庫優化

2016-12-12 13:07:57

數據庫優化SQL

2011-01-06 09:28:19

SQL語句

2010-09-07 16:12:36

SQL語句數據庫壓縮

2010-05-14 14:00:59

MySQL數據庫優化

2010-05-13 13:49:09

MySQL數據庫

2013-01-04 10:00:12

MySQL數據庫數據庫查詢優化

2023-03-13 00:01:10

數據庫性能MySQL

2010-06-04 10:05:55

MySQL數據庫還原

2014-07-18 09:33:53

數據庫數據庫優化

2011-08-22 12:01:36

SQL Server代碼優化

2010-06-10 13:25:38

2010-06-28 10:36:42

SQL Server數
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品免费 | 亚洲第一网站 | 国产成人在线一区二区 | 亚洲69p| 午夜一区二区三区在线观看 | 欧美成人精品激情在线观看 | 狠狠的干 | 91免费看片 | 国产福利免费视频 | 亚洲成人福利在线观看 | 国产精品久久久久久久久久妇女 | 久久久久国产精品午夜一区 | 99久久中文字幕三级久久日本 | 欧美激情久久久 | 国产高清视频 | 国产一区二区三区久久 | 日韩精品久久久久久 | 极品的亚洲 | 国产偷录叫床高潮录音 | 亚洲精品亚洲人成人网 | 亚洲精品福利视频 | 激情久久av一区av二区av三区 | av黄色片在线观看 | 在线观看日本网站 | 99re99| 国产精品久久久久9999鸭 | 欧美三级不卡 | 殴美成人在线视频 | 国产日韩欧美二区 | 91操操操 | 日韩免费一区二区 | 日本福利在线观看 | 欧美αv| 日韩精品欧美精品 | 岛国在线免费观看 | 久久国内 | 亚洲在线一区二区三区 | 一级毛片免费完整视频 | 在线观看精品 | 999国产精品视频免费 | 日韩中文一区 |