對於任何query,返回的資料都需要通過網路資料報傳回給客戶端,去除的column越多,須要傳輸的資料量自然會越大,不論是從網路頻寬方面考慮還是從網路傳輸的緩衝區來看,這都是乙個浪費。
如果是需要排序的query,其影響就更加大了。在mysql中存在兩種排序演算法:
一種是在mysql4.1之前的演算法,實現方式是先將需要排序的字段和可以直接定位到相關行資料的指標資訊取出,然後在設定的排序區(通過引數sort_buffer_size 設定)中進行排序,完成排序之後再次通過行指標資訊取出所需的column,也就是說這種演算法須要訪問兩次資料。
第二種排序演算法是從mysql4.1版本開始使用的改進演算法,一次性將所需的column全部取出,在排序區排序後直接將資料返回給請求客戶端。改進演算法只須要訪問一次資料,減少了大量的隨機io,極大地提高了排序query語句的效率。
但是,這種改進後的排序演算法一次性取出並快取的資料比第一種演算法要多很多,如果我們將不需要的column也取出來,就會極大地浪費排序過程所需要的記憶體。在mysql4.1之後的版本中,可以通過設定max_length_for_sort_data 引數來控制mysql選擇第一種排序演算法還是第二種。當取出的所有欄位總大小大於max_length_for_sort_data的設定時,mysql會選擇使用第一種排序演算法,反之,則會選擇第二種。為了盡可能地提高排序效能,我們自然更希望使用第二種排序演算法。
mysql排序錯誤 MySQL中奇怪的排序錯誤?
我的mysql伺服器 版本 5.0.51a 3ubuntu5.8 我有以下innodb表 create table kontostaende id int 11 not null auto increment,zeit timestamp not null default current times...
mysql排序雙列排序 MySQL中的多列排序
讓我們首先建立乙個表 mysql create table demotable id int,value int query ok,0 rows affected 0.68 sec 使用插入命令在表中插入一些記錄 insert into demotable values 100,85885 inse...
MySQL中的排序規則
在新建mysql資料庫或表的時候經常會選擇字符集和排序規則。資料庫用的字符集大家都知道是怎麼回事,那排序規則是什麼呢?排序規則 是指對指定字符集下不同字元的比較規則。其特徵有以下幾點 1 兩個不同的字符集不能有相同的排序規則 2 兩個字符集有乙個預設的排序規則 3 有一些常用的命名規則。如 ci結尾...