400-650-7353

精品課程

您所在的位置:首頁 > IT干貨資料 > 軟件測試 > 功能測試也可以發現數據庫相關的性能

功能測試也可以發現數據庫相關的性能

  • 發布: 軟件測試培訓
  • 來源:軟件測試干貨資料
  • 2020-03-06 17:15:28
  • 閱讀()
  • 分享
  • 手機端入口
很多同學認為功能測試和性能測試是嚴格分開的,功能測試人員無法發現性能問題。其實不是這樣的,功能測試人員在驗證功能時也可以發現性能問題;一些功能反而在功能測試環境不好驗證,需要在性能環境上測試。

今天咱們就說一下測試涉及數據庫操作的功能時如何發現SQL語句使用不當導致的性能低的問題。主要方法就是通過EXPLAIN命令查看SQL語句的執行計劃,如果執行計劃中沒有使用任何索引,基本上可以確認是性能問題,其他情況需要具體分析。如果開發不信,將SQL語句涉及的表格插入100萬行然后執行相同的功能操作看看。

今天的例子以Mysql數據庫演示結果,其他數據庫也是類似操作。

執行explain之后結果集包含如下信息:

+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------+

|

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

+

+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------+

每個字段解釋如下表:

字段 含義 取值 取值說明
id 查詢中SELELCT語句的順序   id如果相同,從上往下依次執行。id不同,id值越大,執行優先級越高,如果行引用其他行的并集結果,則該值可以為NULL
select_type 查詢使用的類型 simple 簡單的select查詢,沒有或者子查詢
primary 最外層的select查詢
  中的第二個或隨后的select查詢,不依賴于外部查詢的結果集
dependent 中的第二個或隨后的select查詢,依賴于外部查詢的結果集
subquery 子查詢中的第一個select查詢,不依賴與外部查詢的結果集
dependent subquery 子查詢中的第一個select查詢,依賴于外部查詢的結果集
derived 用于from子句中有子查詢的情況,mysql會遞歸執行這些子查詢,此結果集放在臨時表中
table 輸出行所引用的表名    
type 訪問類型 system 表僅有一行,是const類型的一個特例
const 確定只有一行匹配的時候,mysql優化器會在查詢前讀取它并且只讀取一次,速度非常快
eq_ref 對于每個來自于前面的表的行組合,從該表中讀取一行,常用在一個索引是unique key或者primary key
ref  
ref_or_null 類似ref,但是添加了可以專門搜索null值的行
index_merge 使用了索引合并優化方法
range 只檢索給定范圍的行,使用一個索引來選擇行
index 會掃描索引樹
all 進行完整的表掃描
possible_keys 使用這個索引去輔助查找記錄    
key 實際使用的索引    
key_len 鍵長度   在不損失精確性的情況下,長度越短越好
ref 使用哪個列或常數與key一起從表中選擇相應的行    
rows 必須掃描的行數   此數值為一個預估值,不是具體值
filtered 返回結果的行數所占需要讀到的行(rows的值)的比例    
extra   using index 使用了覆蓋索引
using where 搜到記錄后進行了后過濾
using temporary 使用臨時表來存儲結果集
using filesort 無法利用索引直接完成排序
using join buffer 獲取連接條件時沒有用到索引
using index condition  

執行樣例:

mysql> explain select * from test where id > 1;

+----+-------------+-------+-------+---------------+---------+---------+------+-------+-------------+

|

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

+

+----+-------------+-------+-------+---------------+---------+---------+------+-------+-------------+

|

| 1 | SIMPLE | test | range | PRIMARY | PRIMARY | 8 | NULL | 34252 | Using where |

+

+----+-------------+-------+-------+---------------+---------+---------+------+-------+-------------+

大家初步使用執行計劃時,可以只關注type的取值是否是ALL即可,如果是ALL就說明SQL語句執行會導致全表掃描,這種SQL語句在表記錄較多時會引入性能問題。

想要了解更多軟件測試的課程,加入優就業的軟件測試交流群吧,群內會有專職的老師為你答疑解惑。另外群內不定期還會有免費直播課,由現役的講師來授課。還有5天免費試學的活動,心動不如行動,趕快加入吧。點擊加群 群號:617089523(為了更有效率地提供服務,加群時請備注暗號:領資料)

相關推薦:

接口測試怎么才能做好?

軟件測試流程和方法

>>本文地址:
注:本站稿件未經許可不得轉載,轉載請保留出處及源文件地址。

申請免費試聽課程
課程干貨資料
 

相關推薦

從入門到進階
免費干貨資料

進群即領(備注:500G)
進群即領
(備注:500G)
課程資料、活動優惠 領取通道
 
 
10分赛车-首页 乌兰浩特市 | 鹿泉市 | 麦盖提县 | 大渡口区 | 阿勒泰市 | 阿拉尔市 | 崇信县 | 会同县 | 双牌县 | 辉南县 | 乌兰县 | 会同县 | 马公市 | 太康县 | 宜川县 | 蒙城县 | 龙里县 | 建昌县 | 湘乡市 | 丰原市 | 伽师县 | 德惠市 | 柳林县 | 柳河县 | 银川市 | 天等县 | 浦城县 | 武川县 | 百色市 | 延庆县 | 钟祥市 | 敦煌市 |