大資料之資料庫mysql優化實戰之索引的使用

2021-07-30 10:00:46 字數 2522 閱讀 5260

大家帶著問題,去看下面的段落

索引在什麼情況下使用

錶行數少,使用查詢次數少,update少

reset

query

#select

max(obuid) from

`etcblacklist11` etc where obuid<1130000000045617 #查詢有多少條行數 #select

count(*) from (select * from etcblacklist11 where etcblacklist11.obuid < 1130000000001917) t; #select * from

`etcblacklist11` etc where etc.obuid<1130000000001917; #建立索引,不要用主鍵,主鍵是特殊的索引

#create

`etcblacklist11` etc where etc.obuid<1130000000045617;

如何使用索引

#10000條的查詢時間為0.040s

#select * from

`etcblacklist11` etc where etc.id<10000; # 一定要清除快取,否則測試時間不準確,

#預設 query_cache 是開啟的

#第一種:你使用 show

global

variables

like

'%query_cache%'; #確認一下有沒有開啟,如果開啟了。第一次查詢讀資料檔案,第二次就會走query_cache,所以就會很快。當然 ,如果資料更新了,要重新再快取。

#第二種情況 ,查詢表引擎:show

variables

like

'%storage_engine%', 表引擎使用innodb.第一次查詢也會走資料檔案,第二次直接走buffer_pool, #也比直接查詢資料檔案要快 以下是兩種方式清除快取 reset

query

cache; #flush

tables; #總計行數10w條資料, 使用*號所用時間是0.695秒

#select * from etcblacklist11 where etcblacklist11.issuerid > 1120000000000001; #使用全欄位名 所用時間是0.729s,減去一般的字段只需0.341s

#select etcblacklist11.id,etcblacklist11.cardid,etcblacklist11.issuerid,etcblacklist11.license,etcblacklist11.licensename, #etcblacklist11.licensenamea,etcblacklist11.licensenameb,etcblacklist11.netno,etcblacklist11.obuid,etcblacklist11.strid, #etcblacklist11.strtime1,etcblacklist11.strtime2,etcblacklist11.strtmp1,etcblacklist11.strtmp2,etcblacklist11.strt***, #etcblacklist11.strtmp4 from etcblacklist11 where etcblacklist11.issuerid > 1120000000000001; #將issuerid欄位建立索引查詢時間為0.462s

#建立索引

#create

index idx_issuerid on etcblacklist11(issuerid); #刪除索引 alter

table etcblacklist11 drop

index idx_issuerid; #說建了索引反而會比不建所以更慢,如果這個欄位的值變化區間很大,那麼建了索引比不建索引更快,當然也不是索引越多越好

#經常插入、刪除、修改的表,對一些經常處理的業務表應在查詢允許的情況下儘量減少索引

#select etcblacklist11.id,etcblacklist11.cardid,etcblacklist11.issuerid,etcblacklist11.license,etcblacklist11.licensename, #etcblacklist11.licensenamea,etcblacklist11.licensenameb,etcblacklist11.netno,etcblacklist11.obuid,etcblacklist11.strid, #etcblacklist11.strtime1,etcblacklist11.strtime2,etcblacklist11.strtmp1,etcblacklist11.strtmp2,etcblacklist11.strt***, #etcblacklist11.strtmp4 from etcblacklist11 where etcblacklist11.issuerid > 1120000000000001;

說明,上面的例子詳細講解了使用*和不使用的區別,以及建立索引和刪除索引,還有如何清除快取。

大資料 資料庫優化

1.保證需求功能實現的前提下,減少對資料庫的訪問次數 可以用快取儲存查詢資料,減少訪問次數 2.使用搜尋引數,儘量減少對資料庫表的訪問行數,最少化結果集。3.能夠分開的操作盡量分開處理,提高每次的響應速度 4.使用sql時,盡量把使用的索引放在選擇的首列。5.演算法的結構盡量簡單 6.在查詢時,不要...

mysql資料庫優化之索引優化

一 如何選擇合適的列建立索引 1 一般會選擇在where從句中,group by從句中,order by從句中 join on 從句中,建立索引,在特殊情況下select 從句中,所出的列,進行索引,當乙個索引包含了查詢中的所有列,那麼稱之為這樣的索引為覆蓋索引,當我們的查詢執行的頻率非常高,並且索...

mysql 資料庫庫優化之 小結

show engines mysql 高效獲取資料的資料結構。我的理解索引相當於一本書的目錄,通過目錄就知道要的資料在 不用一頁一頁查閱找出需要的資料。關鍵字 index。不支援,如果希望支援中文,有兩個方案,執行完成插入語句後,開啟索引,統一新增索引。alter table table name ...