mysql查詢效能

2021-09-26 04:45:04 字數 1174 閱讀 5880

業務效能測試中,如果乙個查詢介面,譬如根據使用者id去查詢乙個使用者的詳細資訊,jmeter指令碼中是否需要將使用者id進行變數化,(系統中不涉及redis之類的快取)使用者資訊都是從資料庫直接查詢的;

如果jmeter指令碼中將使用者id寫死,就併發查詢同乙個使用者的資訊,吞吐量會不會有什麼不同

使用者表 userinfo 18w資料,idb檔案大小168m

分別測試如下場景

1.將使用者id變數化,併發去獲取18w使用者的資訊

2.將使用者id寫死,併發去獲取乙個使用者的資訊

兩種場景下測試的吞吐量居然是一樣的

問題一:難道mysql沒有開啟快取??

我們的業務庫 的mysql用的是innodb引擎mysql的環境分兩種

一種是查詢快取:將查詢sql、查詢結果集儲存在記憶體中查詢了下資料庫的配置,query_cache_type為off,查詢快取未開啟

第二種是innodb的記憶體緩衝池

(1)緩衝池(buffer pool)是一種常見的降低磁碟訪問的機制;

(2)緩衝池通常以頁(page)為單位快取資料;一頁的大小為16k(innodb_page_size)

通過show engine innodb status查詢兩種場景下緩衝池隊長度的變化

第一種場景:將使用者id變數化,併發去獲取18w使用者的資訊database pages增加了4000左右

第二種場景:將使用者id寫死,併發去獲取乙個使用者的資訊database pages增加了3左右

這樣來看的話,雖然沒有用到查詢快取,但是innodb的緩衝池應該起作用啦,

第一種場景讀取的物理磁碟次數明顯比較多,為啥吞吐量沒區別尼難道是因為資料量太小了,100m的資料讀入記憶體很快??基本不會消耗io資源?

後來換了乙個500w的表,大小1.2g 也是同樣的結果

這樣是不是說明 如果表大小在百萬內,查詢請求的引數是不是都可以寫死?沒必要變數化。。。。,這樣資料是不是可以隨便構造,不用關心資料的具體取值

mysql查詢效能優化 MySQL 查詢效能優化

在日常開發中,程式設計師寫的最多的除了bug之外,應該算是sql語句了。sql的質量影響了程式的響應速度,只有利用mysql的特性,才能讓mysql更有效的執行查詢sql,充分發揮mysql的優勢,並避開它的弱點。為什麼查詢速度會慢?在編寫sql之前,需要清楚一點 真正重要的是響應時間。如果我們把查...

mysql子查詢效能 MySQL子查詢效能

1 語法 子查詢有in和exists兩種,哪種速度更快呢?主要取決於兩張表的大小關係。select from a where cc in select cc from b select from a where exists select cc from b where b.cc a.cc in會先...

Mysql 效能查詢

mysql鎖占用後,表無法操作,解決辦法 原因 未提交事物,阻塞ddl,繼而阻塞所有同表的後續操作 通過 select frominformation schema.innodb trx g,找到未提交事物的sid,然後 kill 掉,讓其回滾。mysql查詢當前鎖狀況 檢視mysql 事務處理列表...