mysqldistinct使用方法 mysql關(guān)鍵字查詢的配置?
mysql關(guān)鍵字查詢的配置?您可以用這種編寫SQL語句。假設(shè)表結(jié)構(gòu)如下:t1(colToChk,col2) t2(keyword)列出了要搜索的關(guān)鍵字,t2中字段#34colToChk#34的相關(guān)記錄
mysql關(guān)鍵字查詢的配置?
您可以用這種編寫SQL語句。假設(shè)表結(jié)構(gòu)如下:t1(colToChk,col2) t2(keyword)列出了要搜索的關(guān)鍵字,t2中字段#34colToChk#34的相關(guān)記錄行包含了要搜索的關(guān)鍵字。
Select,b . * from(select distinct keyword from T2)a,t1b where like concat (# 39% # 39,# 39% # 39)通過將上述SQL語句放在正確的表名和字段名上,可以返回所需的效果。
如何分析一條SQL的性能?
在性能測試中,我們經(jīng)常會遇到一些sql問題。其實數(shù)據(jù)庫是近幾年性能測試中最常見的問題,不是IO高就是cpu高,所以數(shù)據(jù)的優(yōu)化在性能測試過程中占據(jù)了非常重要的位置。這里我將介紹msyql性能調(diào)優(yōu)過程中常用的三個利器:
1、慢速查詢(分析sql問題)
2.解釋(展示了mysql如何使用索引來處理select語句和連接表。可以幫助選擇更好的索引和編寫更優(yōu)化的查詢語句)
(查詢SQL將執(zhí)行多長時間,并了解CPU/內(nèi)存的使用情況,系統(tǒng)鎖、表鎖執(zhí)行需要多長時間等。)
首先,讓我們 讓我們談?wù)刴ysql ■慢速查詢。
1.配置已打開
Linux:
添加mysql配置文件
log-slow-qu:。
在的[mysqld]中添加以下語句:
log-slow-qu: w:
使用mysql 自己的命令mysqlduMP慢速視圖
公共命令
-s ORD:只考慮包含該字符串:的stmts
s,順序,不夠詳細。我用了,包括讀代碼,主要包括c,t,l,r和ac,at,al,ar,按照查詢次數(shù),時間,鎖時間,返回記錄數(shù)排序,前面有-t,表示top n,即返回多少條數(shù)據(jù)-g,
mysqldumpslow-s c-t 20 host-slow . log
mysqldumpslow-s r-t 20 host-slow . log
上面的命令可以顯示20條被訪問最多的sql語句和20條返回最多記錄集的sql語句。
myqldumslow-T10-t-g "左連接 "host-slow.log這是根據(jù)時間返回左連接的前10個sql語句。
然后是解釋。
如何使用:
執(zhí)行explain select * from RES _ user order by modified time limit 0,1000以獲得以下結(jié)果:
顯示結(jié)果分析:
表|類型|可能的關(guān)鍵字|關(guān)鍵字|關(guān)鍵字|引用|行|額外
解釋欄的解釋:
桌子
顯示該行中的數(shù)據(jù)是關(guān)于哪個表的。
類型
這是顯示所使用的連接類型的重要列。連接類型從最好到最差依次為const、eq_reg、ref、range、indexhe和ALL。
可能的鍵
顯示可能應(yīng)用于此表的索引。如果為空,則沒有可能的索引。您可以從相關(guān)域的WHERE語句中選擇適當(dāng)?shù)恼Z句。
鍵
實際使用的索引。如果為NULL,則不使用索引。在極少數(shù)情況下,MYSQL會選擇一個不夠優(yōu)化的索引。在這種情況下,可以在SELECT語句中使用US:#)
沒有找到理想的索引,所以對于上一個表中的每個行組合,MYSQL檢查使用哪個索引,并使用它從表中返回行。這是使用索引的最慢的連接之一。
使用文件排序
當(dāng)您看到這種情況時,查詢需要優(yōu)化。MYSQL需要采取額外的步驟來找出如何對返回的行進行排序。它根據(jù)存儲排序鍵值和匹配條件的所有行的連接類型和行指針對所有行進行排序。
使用索引
從只使用索引中的信息而不讀取實際操作的表中返回列數(shù)據(jù),當(dāng)表中所有請求的列都是同一索引的一部分時,會發(fā)生這種情況。
使用臨時
當(dāng)您看到這種情況時,查詢需要優(yōu)化。這里,MYSQL需要創(chuàng)建一個臨時的
表來存儲結(jié)果,這通常發(fā)生在不同的列集上,而不是ORDER BY上。
使用位置
WHERE子句用于限制哪些行將匹配下一個表或返回給用戶。這將會發(fā)生,如果你不 我不想返回表中的所有行,并且連接類型是ALL或index,或者查詢有問題。
不同連接類型的說明(按效率順序)
系統(tǒng)
該表只有一行:系統(tǒng)表。這是const連接類型的特殊情況。
常數(shù)
表中記錄的最大值可以匹配該查詢(索引可以是主鍵或唯一索引)。因為只有一行,所以這個值實際上是一個常量,因為MYSQL先讀取這個值,然后把它當(dāng)作一個常量。
eq_ref
在連接中,MYSQL在查詢時從前面的表中讀取每個記錄的并集。當(dāng)查詢使用所有帶有主鍵或唯一鍵的索引時使用的記錄。
裁判員
只有當(dāng)查詢使用非唯一鍵、主鍵或這些類型的一部分(例如,使用最左邊的前綴)時,才會出現(xiàn)這種連接類型。對于前一個表的每個行聯(lián)合,將從該表中讀取所有記錄。這種類型很大程度上取決于根據(jù)索引匹配了多少記錄——越少越好。
范圍
這種連接類型使用索引返回某個范圍內(nèi)的行,如gt或lt;當(dāng)你尋找某物時會發(fā)生什么。
指數(shù)
這種連接類型聯(lián)合掃描前一個表中的每一條記錄(比全部掃描更好,因為索引通常小于表數(shù)據(jù))
全部
這種連接類型會對每個先前的記錄執(zhí)行完整的掃描,這通常是不好的,應(yīng)該盡可能避免。
然后是側(cè)寫。
我們可以先用它
mysqlgt選擇@ @分析
-
| @ @剖析|
-
| 0 |
-
集合中的1行(0.00秒),查看是否已啟用profile,以及profile ng。
該值為0,可通過以下方法獲得
mysqlgt集合分析1
查詢正常,0行受影響(0.00秒)
mysqlgt選擇@ @分析
-
| @ @剖析|
-
| 1 |
-
集合中的1行(0.00秒)
啟用。啟用概要分析后,我們執(zhí)行一個查詢語句,例如:
SELECT * FROM res_user ORDER BY修改的時間限制
0,1000
mysqlgt顯示個人資料
- - -
-
|查詢ID |持續(xù)時間|查詢|
- - -
-
| 1 | 0.00012200 |選擇@@profiling |
|2 | 1.54582000 |從res_user中選擇res_id
按修改的時間限制0,3 |排序
- - -
-
集合中的2行(0.00秒)注意:Query_ID表示剛剛執(zhí)行的查詢語句。
mysqlgt顯示查詢2的配置文件
- -
|狀態(tài)|持續(xù)時間|
- -
|開始| 0.000013 |
|正在檢查查詢| 0.000035 |的查詢緩存
|打開表格| 0.000009 |
|系統(tǒng)鎖定| 0.000002 |
|表鎖| 0.000015 |
| init | 0.000011 |
|優(yōu)化| 0.000003 |
|統(tǒng)計| 0.000006 |
|正在準(zhǔn)備| 0.000006 |
|正在執(zhí)行| 0.000001 |
|排序結(jié)果| 1.545565 |
|發(fā)送數(shù)據(jù)| 0.000038 |
| end | 0.000003 |
|查詢結(jié)束| 0.000003 |
|正在釋放項目| 0.000069 |
|將結(jié)果存儲在查詢緩存中| 0.000004 |
|記錄慢速查詢| 0.000001 |
|記錄慢速查詢| 0.000033 |
|清理| 0.000003 |
- -
集合中有19行(0.00秒)
結(jié)論:可以看出這個查詢語句的執(zhí)行過程和執(zhí)行時間,總時間約為1.545s,此時我們再執(zhí)行一次。
mysqlgt通過修改時間限制0,3從res_user ORDER中選擇res_id
-
| res_id |
-
| 1000305 |
| 1000322 |
| 1000323 |
-
集合中的3行(0.00秒)
mysqlgt顯示個人資料
- - -
|查詢ID |持續(xù)時間|查詢|
- - -
| 1 | 0.00012200 |選擇@@profiling |
| 2 | 1.54582000 |根據(jù)修改的時間限制0,3 |從res_user ORDER中選擇res_id
| 3 | 0.00006500 | SELECT RES _ id FROM RES _ user ORDER BY modified time LIMIT 0,3 |
- - -
集合中的3行(0.00秒)
mysqlgt顯示查詢3的配置文件
- -
|狀態(tài)|持續(xù)時間|
- -
|開始| 0.000013 |
|正在檢查查詢| 0.000005 |的查詢緩存
|檢查緩存的權(quán)限| 0.000003 |
|將緩存的結(jié)果發(fā)送到客戶端| 0.000040 |
|記錄慢速查詢| 0.000002 |
|清理| 0.000002 |
- -
一組6行(0.00秒)(注意用紅色標(biāo)記的位置)
結(jié)論:可以看出,第二次查詢因為上一次查詢生成了緩存,所以這次不需要再從數(shù)據(jù)庫文件中讀取數(shù)據(jù),而是直接從緩存中讀取。因此,查詢時間比第一個查詢快得多(第一個查詢用了1.5秒,這個查詢用了不到5毫秒)。