資料庫優化 sql語句優化

2021-09-02 12:19:06 字數 1569 閱讀 8817

1、group by語句優化:

因為mysql對所有group by的字段進行排序,所以如果包含group by但是想要避免排序結果的消耗,可以指定order by null來進行group by的排序。

select id,sun(moneys) from sales group by id     //explain的extra顯示using temporary;using filesort

select id,sun(moneys) from sales2 group by id order by null //explain的extra顯示usingtemporary.

2、優化order by語句

在有些情況下,mysql可以使用乙個索引來滿足order by字句,而不需要額外的排序。where條件和order by使用相同的索引,並且order by的順序和索引的順序相同,並且order by的字段都是公升序或者都是降序。

案例分析:

select * from t1 order by key_part1,key_part2;

select * from t1 where key_part1 = 1 order by key_part1 desc,key_part2 desc;

//以上兩種情況都能夠使用索引

//以下幾種情況是不能使用索引的

select * from t1 order by key_part1 desc,key_part2 asc; //order by的字段混合desc和asc

select * from t1 where key2 = 'constant' order by key1 //用於查詢的關鍵字和order by中使用的不相同

select * from t1 order by key1,key2 //對不同的關鍵字進行order by

3、巢狀查詢的優化

一般利用join查詢來替換巢狀查詢:

select * from sales2 left join company2 on sales2.company_id = company2.id where sales2.company_id is null

//改sql用explain執行的結果顯示用到ind_sales2_companyid_moneys索引,如果company2表中對id建有索引的話,效能會更好。

4、優化or條件

對於含有or的查詢字句,如果要用索引,則or之間的每個條件列都必須用到索引,切記,如果在or連線的字段上如果建復合索引,用or語句查詢的時候是用不到的。

select * from sales2 where id = 2 or year = 1998;     //explain執行的extra顯示using union(ind_sales2_id,ind_sales2_year),可以發現查詢正確的用到了索引,mysql在處理含有or的查詢時,實際是對or的各個字段分別查詢後的結果進行了union。

資料庫 sql語句優化

寫操作 write 1 如果你同時從同一客戶插入很多行,使用多個值表的insert語句。這比使用分開insert語句快 在一些情況中幾倍 insert into test values 1,2 1,3 1,4 2 如果你從不同客戶插入很多行,能通過使用insert delayed語句得到更高的速度。...

12 優化資料庫 優化SQL語句 索引

第 一 優化索引 sql語句 分析慢查詢 第二 設計表的時候嚴格按照資料庫的設計正規化來設計資料庫 第三 我們可以加上redis快取,將經常被訪問到的資料,但是不需要經常變化的資料放入至redis快取伺服器裡面 第四 還可優化硬體,在硬體層面,我們可以使用更好的一些硬碟 固態硬碟 使用一些磁碟陣列技...

SQL語句及資料庫優化

1,統一sql語句的寫法 對於以下兩句sql語句,程式設計師認為是相同的,資料庫查詢優化器認為是不同的。所以封裝成復用方法,用標準模板來控制。select from dual select from dual 其實就是大小寫不同,查詢分析器就認為是兩句不同的sql語句,必須進行兩次解析。生成2個執行...