mysql 減少group by 的開銷

2021-07-26 19:32:26 字數 774 閱讀 6798

group by  一般 和集合函式一起使用,使用情況最多的 是count(),  即將 資料按照一定條件分組,再統計每一組的總數,  顯然這是非常消耗資源的一種做法. mysql 36軍規裡 表示盡量少使用 count(),也是這個原因.  如果想對多種條件進行 統計 ,可以使用 判斷語句  如sum(if)  sum(cses when then)  得到.

雖然希望較少的使用 groupby 但是在必須使用group by 也是需要 優化,減輕伺服器壓力的 

將groupby 的字段 設定為 索引可以有效降低sql 陳本,但是如果 欄位在未設定 索引的情況下,想要加快sql執行,可以使用如下:

groupby預設將 分組的字段進行一次排序

select id,name from table_test group by name ;

實際等於 

select id,name from table_test group by name order by name ;

在很多情況下 order by name 消耗時間非常多,甚至大於 group by name本身.

如果只需要對資料分組,並沒有對分組後的資料排序的需求,使用如下

select id,name from table_test group by name order by null ;

可以大幅降低篩選時間

當然 如果使用的 其他的排序 ,則預設的排序不起作用

select id,name from table_test group by name order by class;

減少mysql記憶體 減少mysql記憶體占用

小站點的伺服器一般在512m或1g左右,但是我們安裝的mysql 5.6 5.7預設啟動占用記憶體400多m,mysql記憶體佔用率明顯偏高,將會導致mysql崩潰,經常出現mysql自動停止的情況。mysql的使用記憶體可以優化的。主要有兩種方法 關閉performance schema和調整ms...

mysql 減少快取碎片

沒有辦法避免所有的碎片,但是仔細選擇query cache min res unit 可以有效的避免記憶體浪費,query cache min res unit 過大會產生記憶體浪費和碎片,query cache min res unit 過小導致記憶體經常allocate 也回帶來效能影響,所以q...

關於mysql 的group by 的用法一

group by 有乙個原則 在select 後面跟的非聚合函式的字段,必須出現在group by 的後面,但是我在操作的過程中沒有新增所有的字段到 group by 的後面,並沒有報錯 經過測試後發現,沒有跟在group by 後面的字段選擇出來的資料時 錯誤的。idnameab 1aa231 2...