一级日韩免费大片,亚洲一区二区三区高清,性欧美乱妇高清come,久久婷婷国产麻豆91天堂,亚洲av无码a片在线观看

我勞動(dòng),我快樂(lè )小學(xué)作文

時(shí)間:2025-09-25 10:30:23 勞動(dòng) 我要投稿

我勞動(dòng),我快樂(lè )小學(xué)作文

  MySQL 自帶 slow log 的分析工具 mysqldumpslow ,但是沒(méi)有說(shuō)明。本文通過(guò)分析該腳本,介紹了其用法。

我勞動(dòng),我快樂(lè )小學(xué)作文

  slow log 是 MySQL 根據 SQL 語(yǔ)句的執行時(shí)間設定,寫(xiě)入的一個(gè)文件,用于分析執行較慢的語(yǔ)句。

  只要在 my.cnf 文件中配置好:

  log-slow-queries = [slow_query_log_filename]

  即可記錄超過(guò)默認的 10s 執行時(shí)間的 SQL 語(yǔ)句。

  如果要修改默認設置,可以添加:

  long_query_time = 5

  設定為 5s 。

  如果要記錄所有 SQL 語(yǔ)句,可以寫(xiě)入:

  log-long-format

  # t=time, l=lock time, r=rows

  # at, al, 以及 ar 是對應的平均值

  mysqldumpslow 可以接受的參數有:

  ‘v+’, # verbose

  ‘d+’, # debug

  ‘s=s’, # 排序 (t, at, l, al, r, ar etc)

  ‘r!’, # 倒排序 (largest last instead of first)

  ‘t=i’, # 顯示最高的 n 個(gè)查詢(xún)

  ‘a!’, # 不把所有的數字以 N ,字符串以 ‘S’ 顯示

  ‘n=i’, # abstract numbers with at least n digits within names

  ‘g=s’, # grep: only consider stmts that include this string

  ‘h=s’, # hostname of db server for *-slow.log filename (can be wildcard)

  ‘i=s’, # name of server instance (if using mysql.server startup script)

  ‘l!’, # don’t subtract lock time from total time

  mysql explain的使用說(shuō)明

  explain顯示了mysql如何使用索引來(lái)處理select語(yǔ)句以及連接表?梢詭椭x擇更好的索引和寫(xiě)出更優(yōu)化的查詢(xún)語(yǔ)句。

  使用方法,在select語(yǔ)句前加上explain就可以了:

  如:explain select surname,first_name form a,b where a.id=b.id

  分析結果形式如下:

  引用

  mysql> explain SELECT * FROM `whisper` WHERE to_id = 6696 AND del = 0 AND whisper=0 ORDER BY `send_time` DESC LIMIT 4;

  +—-+————-+———+——+—————+——-+———+——-+——+—————————–+

  | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

  +—-+————-+———+——+—————+——-+———+——-+——+—————————–+

  | 1 | SIMPLE | whisper | ref | to_id | to_id | 4 | const | 1 | Using where; Using filesort |

  +—-+————-+———+——+—————+——-+———+——-+——+—————————–+

  1 row in set (0.00 sec)

  EXPLAIN列的解釋?zhuān)?/p>

  table 顯示這一行的數據是關(guān)于哪張表的

  type 這是重要的列,顯示連接使用了何種類(lèi)型。從最好到最差的連接類(lèi)型為const、eq_reg、ref、range、indexhe和ALL

  possible_keys 顯示可能應用在這張表中的索引。如果為空,沒(méi)有可能的索引?梢詾橄嚓P(guān)的域從WHERE語(yǔ)句中選擇一個(gè)合適的語(yǔ)句

  key 實(shí)際使用的索引。如果為NULL,則沒(méi)有使用索引。很少的情況下,MYSQL會(huì )選擇優(yōu)化不足的索引。這種情況下,可以在SELECT語(yǔ)句中使用USE INDEX(indexname)來(lái)強制使用一個(gè)索引或者用IGNORE INDEX(indexname)來(lái)強制MYSQL忽略索引

  key_len 使用的索引的長(cháng)度。在不損失精確性的情況下,長(cháng)度越短越好

  ref 顯示索引的哪一列被使用了,如果可能的話(huà),是一個(gè)常數

  rows MYSQL認為必須檢查的用來(lái)返回請求數據的行數

  Extra 關(guān)于MYSQL如何解析查詢(xún)的額外信息。將在表4.3中討論,但這里可以看到的壞的例子是Using temporary和Using filesort,意思MYSQL根本不能使用索引,結果是檢索會(huì )很慢

  extra 列返回的描述的意義

  Distinct 一旦MYSQL找到了與行相聯(lián)合匹配的行,就不再搜索了

  Not exists MYSQL優(yōu)化了LEFT JOIN,一旦它找到了匹配LEFT JOIN標準的行,就不再搜索了

  Range checked for each

  Record(index map:#)沒(méi)有找到理想的索引,因此對于從前面表中來(lái)的每一個(gè)行組合,MYSQL檢查使用哪個(gè)索引,并用它來(lái)從表中返回行。這是使用索引的最慢的連接之一

  Using filesort 看到這個(gè)的時(shí)候,查詢(xún)就需要優(yōu)化了。MYSQL需要進(jìn)行額外的步驟來(lái)發(fā)現如何對返回的行排序。它根據連接類(lèi)型以及存儲排序鍵值和匹配條件的全部行的行指針來(lái)排序全部行

  Using index 列數據是從僅僅使用了索引中的信息而沒(méi)有讀取實(shí)際的行動(dòng)的表返回的,這發(fā)生在對表的全部的請求列都是同一個(gè)索引的部分的時(shí)候

  Using temporary 看到這個(gè)的時(shí)候,查詢(xún)需要優(yōu)化了。這里,MYSQL需要創(chuàng )建一個(gè)臨時(shí)表來(lái)存儲結果,這通常發(fā)生在對不同的列集進(jìn)行ORDER BY上,而不是GROUP BY上

  Where used 使用了WHERE從句來(lái)限制哪些行將與下一張表匹配或者是返回給用戶(hù)。如果不想返回表中的全部行,并且連接類(lèi)型ALL或index,這就會(huì )發(fā)生,或者是查詢(xún)有問(wèn)題

  不同連接類(lèi)型的解釋(按照效率高低的順序排序)

  system 表只有一行:system表。這是const連接類(lèi)型的特殊情況

  const 表中的一個(gè)記錄的最大值能夠匹配這個(gè)查詢(xún)(索引可以是主鍵或惟一索引)。因為只有一行,這個(gè)值實(shí)際就是常數,因為MYSQL先讀這個(gè)值然后把它當做常數來(lái)對待

  eq_ref 在連接中,MYSQL在查詢(xún)時(shí),從前面的表中,對每一個(gè)記錄的聯(lián)合都從表中讀取一個(gè)記錄,它在查詢(xún)使用了索引為主鍵或惟一鍵的全部時(shí)使用

  ref 這個(gè)連接類(lèi)型只有在查詢(xún)使用了不是惟一或主鍵的鍵或者是這些類(lèi)型的部分(比如,利用最左邊前綴)時(shí)發(fā)生。對于之前的表的每一個(gè)行聯(lián)合,全部記錄都將從表中讀出。這個(gè)類(lèi)型嚴重依賴(lài)于根據索引匹配的記錄多少—越少越好

  range 這個(gè)連接類(lèi)型使用索引返回一個(gè)范圍中的行,比如使用>或<查找東西時(shí)發(fā)生的情況

  index 這個(gè)連接類(lèi)型對前面的表中的每一個(gè)記錄聯(lián)合進(jìn)行完全掃描(比ALL更好,因為索引一般小于表數據)

  ALL 這個(gè)連接類(lèi)型對于前面的每一個(gè)記錄聯(lián)合進(jìn)行完全掃描,這一般比較糟糕,應該盡量避免

  mysql常用的hint(原創(chuàng ))

  mysql常用的hint

  對于經(jīng)常使用oracle的朋友可能知道,oracle的hint功能種類(lèi)很多,對于優(yōu)化sql語(yǔ)句提供了很多方法。同樣,在mysql里,也有類(lèi)似的hint功能。下面介紹一些常用的。

  [b]強制索引 FORCE INDEX[/b]

  SELECT * FROM TABLE1 FORCE INDEX (FIELD1) …

  以上的SQL語(yǔ)句只使用建立在FIELD1上的索引,而不使用其它字段上的索引。

  [b]忽略索引 IGNORE INDEX[/b]

  SELECT * FROM TABLE1 IGNORE INDEX (FIELD1, FIELD2) …

  在上面的SQL語(yǔ)句中,TABLE1表中FIELD1和FIELD2上的索引不被使用。

  [b]關(guān)閉查詢(xún)緩沖 SQL_NO_CACHE[/b]

  SELECT SQL_NO_CACHE field1, field2 FROM TABLE1;

  有一些SQL語(yǔ)句需要實(shí)時(shí)地查詢(xún)數據,或者并不經(jīng)常使用(可能一天就執行一兩次),這樣就需要把緩沖關(guān)了,不管這條SQL語(yǔ)句是否被執行過(guò),服務(wù)器都不會(huì )在緩沖區中查找,每次都會(huì )執行它。

  [b]強制查詢(xún)緩沖 SQL_CACHE[/b]

  SELECT SQL_CALHE * FROM TABLE1;

  如果在my.ini中的query_cache_type設成2,這樣只有在使用了SQL_CACHE后,才使用查詢(xún)緩沖。

  [b]優(yōu)先操作 HIGH_PRIORITY[/b]

  HIGH_PRIORITY可以使用在select和insert操作中,讓MYSQL知道,這個(gè)操作優(yōu)先進(jìn)行。

  SELECT HIGH_PRIORITY * FROM TABLE1;

  [b]滯后操作 LOW_PRIORITY[/b]

  LOW_PRIORITY可以使用在insert和update操作中,讓mysql知道,這個(gè)操作滯后。

  update LOW_PRIORITY table1 set field1= where field1= …

  [b]延時(shí)插入 INSERT DELAYED[/b]

  INSERT DELAYED INTO table1 set field1= …

  INSERT DELAYED INTO,是客戶(hù)端提交數據給MySQL,MySQL返回OK狀態(tài)給客戶(hù)端。而這是并不是已經(jīng)將數據插入表,而是存儲在內存里面等待排隊。當mysql有 空余時(shí),再插入。另一個(gè)重要的好處是,來(lái)自許多客戶(hù)端的插入被集中在一起,并被編寫(xiě)入一個(gè)塊。這比執行許多獨立的插入要快很多。壞處是,不能返回自動(dòng)遞增 的ID,以及系統崩潰時(shí),MySQL還沒(méi)有來(lái)得及插入數據的話(huà),這些數據將會(huì )丟失。

  [b]強制連接順序 STRAIGHT_JOIN[/b]

  SELECT TABLE1.FIELD1, TABLE2.FIELD2 FROM TABLE1 STRAIGHT_JOIN TABLE2 WHERE …

  由上面的SQL語(yǔ)句可知,通過(guò)STRAIGHT_JOIN強迫MySQL按TABLE1、TABLE2的順序連接表。如果你認為按自己的順序比MySQL推薦的順序進(jìn)行連接的效率高的話(huà),就可以通過(guò)STRAIGHT_JOIN來(lái)確定連接順序。

  [b]強制使用臨時(shí)表 SQL_BUFFER_RESULT[/b]

  SELECT SQL_BUFFER_RESULT * FROM TABLE1 WHERE …

  當我們查詢(xún)的結果集中的數據比較多時(shí),可以通過(guò)SQL_BUFFER_RESULT.選項強制將結果集放到臨時(shí)表中,這樣就可以很快地釋放MySQL的表鎖(這樣其它的SQL語(yǔ)句就可以對這些記錄進(jìn)行查詢(xún)了),并且可以長(cháng)時(shí)間地為客戶(hù)端提供大記錄集。

  [b]分組使用臨時(shí)表 SQL_BIG_RESULT和SQL_SMALL_RESULT[/b]

  SELECT SQL_BUFFER_RESULT FIELD1, COUNT(*) FROM TABLE1 GROUP BY FIELD1;

  一般用于分組或DISTINCT關(guān)鍵字,這個(gè)選項通知MySQL,如果有必要,就將查詢(xún)結果放到臨時(shí)表中,甚至在臨時(shí)表中進(jìn)行排序。SQL_SMALL_RESULT比起SQL_BIG_RESULT差不多,很少使用。

  查詢(xún)是數據庫技術(shù)中最常用的操作。查詢(xún)操作的過(guò)程比較簡(jiǎn)單,首先從客戶(hù)端發(fā)出查詢(xún)的SQL語(yǔ)句,數據庫服務(wù)端在接收到由客戶(hù)端發(fā)來(lái)的 SQL語(yǔ)句后, 執行這條SQL語(yǔ)句,然后將查詢(xún)到的結果返回給客戶(hù)端。雖然過(guò)程很簡(jiǎn)單,但不同的查詢(xún)方式和數據庫設置,對查詢(xún)的性能將會(huì )有很在的影響。

  因此,本文就在MySQL中常用的查詢(xún)優(yōu)化技術(shù)進(jìn)行討論。討論的內容如:通過(guò)查詢(xún)緩沖提高查詢(xún)速度;MySQL對查詢(xún)的自動(dòng)優(yōu)化;基于索引的排序;不可達查詢(xún)的檢測和使用各種查詢(xún)選擇來(lái)提高性能。

  一、 通過(guò)查詢(xún)緩沖提高查詢(xún)速度

  一般我們使用SQL語(yǔ)句進(jìn)行查詢(xún)時(shí),數據庫服務(wù)器每次在收到客戶(hù)端發(fā)來(lái)SQL后,都會(huì )執行這條SQL語(yǔ)句。但當在一定間隔內(如1分鐘內),接到完 全一樣的SQL語(yǔ)句,也同樣執行它。雖然這樣可以保證數據的實(shí)時(shí)性,但在大多數時(shí)候,數據并不要求完全的實(shí)時(shí),也就是說(shuō)可以有一定的延時(shí)。如果是這樣的 話(huà),在短時(shí)間內執行完全一樣的SQL就有些得不償失。

  幸好MySQL為我們提供了查詢(xún)緩沖的功能(只能在MySQL 4.0.1及以上版本使用查詢(xún)緩沖)。我們可以通過(guò)查詢(xún)緩沖在一定程度上提高查詢(xún)性能。

  我們可以通過(guò)在MySQL安裝目錄中的my.ini文件設置查詢(xún)緩沖。設置也非常簡(jiǎn)單,只需要將query_cache_type設為1即可。在設 置了這個(gè)屬性后,MySQL在執行任何SELECT語(yǔ)句之前,都會(huì )在它的緩沖區中查詢(xún)是否在相同的SELECT語(yǔ)句被執行過(guò),如果有,并且執行結果沒(méi)有過(guò) 期,那么就直接取查詢(xún)結果返回給客戶(hù)端。但在寫(xiě)SQL語(yǔ)句時(shí)注意,MySQL的查詢(xún)緩沖是區分大小寫(xiě)的。如下列的兩條SELECT語(yǔ)句:

  1. SELECT * from TABLE1

  2.

  3. SELECT * FROM TABLE1

  上面的兩條SQL語(yǔ)句對于查詢(xún)緩沖是完全不同的SELECT。而且查詢(xún)緩沖并不自動(dòng)處理空格,因此,在寫(xiě)SQL語(yǔ)句時(shí),應盡量減少空格的使用,尤其是在SQL首和尾的空格(因為,查詢(xún)緩沖并不自動(dòng)截取首尾空格)。

  雖然不設置查詢(xún)緩沖,有時(shí)可能帶來(lái)性能上的損失,但有一些SQL語(yǔ)句需要實(shí)時(shí)地查詢(xún)數據,或者并不經(jīng)常使用(可能一天就執行一兩次)。這樣就需要把 緩沖關(guān)了。當然,這可以通過(guò)設置query_cache_type的值來(lái)關(guān)閉查詢(xún)緩沖,但這就將查詢(xún)緩沖永久地關(guān)閉了。在MySQL 5.0中提供了一種可以臨時(shí)關(guān)閉查詢(xún)緩沖的方法:

  1. SELECT SQL_NO_CACHE field1, field2 FROM TABLE1

  以上的SQL語(yǔ)句由于使用了SQL_NO_CACHE,因此,不管這條SQL語(yǔ)句是否被執行過(guò),服務(wù)器都不會(huì )在緩沖區中查找,每次都會(huì )執行它。

  我們還可以將my.ini中的query_cache_type設成2,這樣只有在使用了SQL_CACHE后,才使用查詢(xún)緩沖。

  1. SELECT SQL_CALHE * FROM TABLE1

  二、MySQL對查詢(xún)的自動(dòng)優(yōu)化

  索引對于數據庫是非常重要的。在查詢(xún)時(shí)可以通過(guò)索引來(lái)提高性能。但有時(shí)使用索引反而會(huì )降低性能。我們可以看如下的SALES表:

  1. CREATE TABLE SALES

  2.

  3. (

  4.

  5. ID INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,

  6.

  7. NAME VARCHAR(100) NOT NULL,

  8.

  9. PRICE FLOAT NOT NULL,

  10.

  11. SALE_COUNT INT NOT NULL,

  12.

  13. SALE_DATE DATE NOT NULL,

  14.

  15. PRIMARY KEY(ID),

  16.

  17. INDEX (NAME),

  18.

  19. INDEX (SALE_DATE)

  20.

  21. );

  假設這個(gè)表中保存了數百萬(wàn)條數據,而我們要查詢(xún)商品號為1000的商品在2004年和2005年的平均價(jià)格。我們可以寫(xiě)如下的SQL語(yǔ)句:

  SELECT AVG(PRICE) FROM SALES

  WHERE ID = 1000 AND SALE_DATE BETWEEN ’2004-01-01′ AND ’2005-12-31′;

  如果這種商品的數量非常多,差不多占了SALES表的記錄的50%或更多。那么使用SALE_DATE字段上索引來(lái)計算平均數就有些慢。因為如果使 用索引,就得對索引進(jìn)行排序操作。當滿(mǎn)足條件的記錄非常多時(shí)(如占整個(gè)表的記錄的50%或更多的比例),速度會(huì )變慢,這樣還不如對整個(gè)表進(jìn)行掃描。因 此,MySQL會(huì )自動(dòng)根據滿(mǎn)足條件的數據占整個(gè)表的數據的比例自動(dòng)決定是否使用索引進(jìn)行查詢(xún)。

  對于MySQL來(lái)說(shuō),上述的查詢(xún)結果占整個(gè)表的記錄的比例是30%左右時(shí)就不使用索引了,這個(gè)比例是MySQL的開(kāi)發(fā)人員根據他們的經(jīng)驗得出的。然而,實(shí)際的比例值會(huì )根據所使用的數據庫引擎不同而不同。

  三、 基于索引的排序

  MySQL的弱點(diǎn)之一是它的排序。雖然MySQL可以在1秒中查詢(xún)大約15,000條記錄,但由于MySQL在查詢(xún)時(shí)最多只能使用一個(gè)索引。因此,如果WHERE條件已經(jīng)占用了索引,那么在排序中就不使用索引了,這將大大降低查詢(xún)的速度。我們可以看看如下的SQL語(yǔ)句:

  1. SELECT * FROM SALES WHERE NAME = “name” ORDER BY SALE_DATE DESC;

  在以上的SQL的WHERE子句中已經(jīng)使用了NAME字段上的索引,因此,在對SALE_DATE進(jìn)行排序時(shí)將不再使用索引。為了解決這個(gè)問(wèn)題,我們可以對SALES表建立復合索引:

  1. ALTER TABLE SALES DROP INDEX NAME, ADD INDEX (NAME, SALE_DATE)

  這樣再使用上述的SELECT語(yǔ)句進(jìn)行查詢(xún)時(shí)速度就會(huì )大副提升。但要注意,在使用這個(gè)方法時(shí),要確保WHERE子句中沒(méi)有排序字段,在上例中就是不能用SALE_DATE進(jìn)行查詢(xún),否則雖然排序快了,但是SALE_DATE字段上沒(méi)有單獨的索引,因此查詢(xún)又會(huì )慢下來(lái)。

  四、 不可達查詢(xún)的檢測

  在執行SQL語(yǔ)句時(shí),難免會(huì )遇到一些必假的條件。所謂必假的條件是無(wú)論表中的數據如何變化,這個(gè)條件都為假。如WHERE value < 100 AND value > 200。我們永遠無(wú)法找到一個(gè)既小于100又大于200的數。

  如果遇到這樣的查詢(xún)條件,再去執行這樣的SQL語(yǔ)句就是多此一舉。幸好MySQL可以自動(dòng)檢測這種情況。如我們可以看看如下的SQL語(yǔ)句:

  1. SELECT * FROM SALES WHERE NAME = “name1” AND NAME = “name2”

  以上的查詢(xún)語(yǔ)句要查找NAME既等于name1又等于name2的記錄。很明顯,這是一個(gè)不可達的查詢(xún),WHERE條件一定是假。MySQL在執行 SQL語(yǔ)句之前,會(huì )先分析WHERE條件是否是不可達的查詢(xún),如果是,就不再執行這條SQL語(yǔ)句了。為了驗證這一點(diǎn)。我們首先對如下的SQL使用 EXPLAIN進(jìn)行測試:

  1. EXPLAIN SELECT * FROM SALES WHERE NAME = “name1”

  上面的查詢(xún)是一個(gè)正常的查詢(xún),我們可以看到使用EXPLAIN返回的執行信息數據中table項是SALES。這說(shuō)明MySQL對SALES進(jìn)行操作了。再看看下面的語(yǔ)句:

  1. EXPLAIN SELECT * FROM SALES WHERE NAME = “name1” AND NAME = “name2”

  我們可以看到,table項是空,這說(shuō)明MySQL并沒(méi)有對SALES表進(jìn)行操作。

  五、 使用各種查詢(xún)選擇來(lái)提高性能

  SELECT語(yǔ)句除了正常的使用外,MySQL還為我們提供了很多可以增強查詢(xún)性能的選項。如上面介紹的用于控制查詢(xún)緩沖的SQL_NO_CACHE和SQL_CACHE就是其中兩個(gè)選項。在這一部分,我將介紹幾個(gè)常用的查詢(xún)選項。

  1. STRAIGHT_JOIN:強制連接順序

  當我們將兩個(gè)或多個(gè)表連接起來(lái)進(jìn)行查詢(xún)時(shí),我們并不用關(guān)心MySQL先連哪個(gè)表,后連哪個(gè)表。而這一切都是由MySQL內部通過(guò)一系列的計算、評估,最后得出的一個(gè)連接順序決定的。如下列的SQL語(yǔ)句中,TABLE1和TABLE2并不一定是誰(shuí)連接誰(shuí):

  1. SELECT TABLE1.FIELD1, TABLE2.FIELD2 FROM TABLE1 ,TABLE2 WHERE …

  如果開(kāi)發(fā)人員需要人為地干預連接的順序,就得使用STRAIGHT_JOIN關(guān)鍵字,如下列的SQL語(yǔ)句:

  1. SELECT TABLE1.FIELD1, TABLE2.FIELD2 FROM TABLE1 STRAIGHT_JOIN TABLE2 WHERE …

  由上面的SQL語(yǔ)句可知,通過(guò)STRAIGHT_JOIN強迫MySQL按TABLE1、TABLE2的順序連接表。如果你認為按自己的順序比MySQL推薦的順序進(jìn)行連接的效率高的話(huà),就可以通過(guò)STRAIGHT_JOIN來(lái)確定連接順序。

  2. 干預索引使用,提高性能

  在上面已經(jīng)提到了索引的使用。一般情況下,在查詢(xún)時(shí)MySQL將自己決定是否使用索引,使用哪一個(gè)索引。但在一些特殊情況下,我們希望MySQL只使用一個(gè)或幾個(gè)索引,或者不希望使用某個(gè)索引。這就需要使用MySQL的控制索引的一些查詢(xún)選項。

  限制使用索引的范圍

  有時(shí)我們在數據表里建立了很多索引,當MySQL對索引進(jìn)行選擇時(shí),這些索引都在考慮的范圍內。但有時(shí)我們希望MySQL只考慮幾個(gè)索引,而不是全部的索引,這就需要用到USE INDEX對查詢(xún)語(yǔ)句進(jìn)行設置。

  1. SELECT * FROM TABLE1 USE INDEX (FIELD1, FIELD2) …

  從以上SQL語(yǔ)句可以看出,無(wú)論在TABLE1中已經(jīng)建立了多少個(gè)索引,MySQL在選擇索引時(shí),只考慮在FIELD1和FIELD2上建立的索引。

  限制不使用索引的范圍

  如果我們要考慮的索引很多,而不被使用的索引又很少時(shí),可以使用IGNORE INDEX進(jìn)行反向選取。在上面的例子中是選擇被考慮的索引,而使用IGNORE INDEX是選擇不被考慮的索引。

  1. SELECT * FROM TABLE1 IGNORE INDEX (FIELD1, FIELD2) …

  在上面的SQL語(yǔ)句中,TABLE1表中只有FIELD1和FIELD2上的索引不被使用。

  強迫使用某一個(gè)索引

  上面的兩個(gè)例子都是給MySQL提供一個(gè)選擇,也就是說(shuō)MySQL并不一定要使用這些索引。而有時(shí)我們希望MySQL必須要使用某一個(gè)索引(由于 MySQL在查詢(xún)時(shí)只能使用一個(gè)索引,因此只能強迫MySQL使用一個(gè)索引)。這就需要使用FORCE INDEX來(lái)完成這個(gè)功能。

  1. SELECT * FROM TABLE1 FORCE INDEX (FIELD1) …

  以上的SQL語(yǔ)句只使用建立在FIELD1上的索引,而不使用其它字段上的索引。

  3. 使用臨時(shí)表提供查詢(xún)性能

  當我們查詢(xún)的結果集中的數據比較多時(shí),可以通過(guò)SQL_BUFFER_RESULT.選項強制將結果集放到臨時(shí)表中,這樣就可以很快地釋放MySQL的表鎖(這樣其它的SQL語(yǔ)句就可以對這些記錄進(jìn)行查詢(xún)了),并且可以長(cháng)時(shí)間地為客戶(hù)端提供大記錄集。

  1. SELECT SQL_BUFFER_RESULT * FROM TABLE1 WHERE …

  和SQL_BUFFER_RESULT.選項類(lèi)似的還有SQL_BIG_RESULT,這個(gè)選項一般用于分組或DISTINCT關(guān)鍵字,這個(gè)選項通知MySQL,如果有必要,就將查詢(xún)結果放到臨時(shí)表中,甚至在臨時(shí)表中進(jìn)行排序。

  1. SELECT SQL_BUFFER_RESULT FIELD1, COUNT(*) FROM TABLE1 GROUP BY FIELD1

【我勞動(dòng),我快樂(lè )小學(xué)作文】相關(guān)文章:

我勞動(dòng)我快樂(lè )作文勞動(dòng)的快樂(lè )作文03-30

我勞動(dòng)我快樂(lè )的作文10-22

我勞動(dòng)我快樂(lè )作文【經(jīng)典】09-01

【精選】我勞動(dòng),我快樂(lè )作文10-16

我勞動(dòng)我快樂(lè )作文01-19

我勞動(dòng),我快樂(lè )作文03-27

我勞動(dòng)我快樂(lè )作文[精選]07-07

[經(jīng)典]我勞動(dòng)我快樂(lè )作文06-27

我勞動(dòng),我快樂(lè )作文10-15

我勞動(dòng)我快樂(lè )作文08-30

  • 相關(guān)推薦
一级日韩免费大片,亚洲一区二区三区高清,性欧美乱妇高清come,久久婷婷国产麻豆91天堂,亚洲av无码a片在线观看