mysql 中如何增加查詢排序效能

2022-03-08 02:15:11 字數 1181 閱讀 9572

這塊的學習領域在高效能mysql中175頁使用索引排序,查詢官方的總比我寫的好一些

前言:在索引中,每種索引的儲存方式都是不同在,在innodb中,儲存方式可以概括為

儲存事務id ,回滾事務id,主鍵索引,還有其他列的索引

因為有其他列的索引存在的關係,加入查詢的條件在索引的範圍以內,它就可以不用回表進行查詢,

先提提回表的消耗,它會產生隨機的磁碟io,相對於全表查詢來說他的效能會更差,但是加入產生了索引情況

為查詢字段全部包含的,他就會產生覆蓋索引,在索引中結束了查詢,尤其是myisam中,bree tree 索引可以進行

壓縮的情況,他會讓查詢的速度更快,然後where條件和查詢字段還有order條件中每個階段的索引都是非常重要的

order by 中的字段順序其實也是很重要的,但是可能

mysql中如果使用排序即 order by 可能會存在使用using temproary  或者filesort 的情況,將會影響到查詢效能,

現在有一些特殊的情況會使得排序查詢不使用filesort

首先order by中涉及的字段需要從最左相對索引,進行挨個判斷,不能存在索引之外字段進行排序,

然後符合排序(預設是公升序)的如果需要使用降序,有一種設計方案,將字串翻轉,或者取反,加入使用的是多表查詢,

orderby 中只能包含關聯的第一張表,使用到的索引中的從左側開始的字段,

也有例外 ,當使用了左側的資料使用了常量,資料也可以使用下乙個字段

打字太累了,搬動這個吧

以上的理論

這個是我自己進行模擬測試的情況

例如目前存在索引

因為需求的原因,有許多專案出現要優化倒序的排序

可以在建立索引的時候進行desc 例如

alter table `wd_announcement`

add index `aa` (`role_id` desc) ;

然後進行explain 查詢是否使用了臨時表

mysql 單錶資料量大時,如何增加查詢速度

首先引用mysql手冊中的一段話 mysql 3.22限制的表大小為4gb。由於在mysql 3.23中使用了myisam儲存引擎,最大表尺寸增加到了65536tb 2567 1位元組 由於允許的表尺寸更大,mysql資料庫的最大有效表尺寸通常是由作業系統對檔案大小的限制決定的,而不是由mysql內...

redmine中增加查詢三步走

假設有檢視tasklists 1 增加資料對映,在models中增加檔案tasklist.rb class tasklist activerecord base end 2 增加控制類及控制對映 a controllers目錄下增加tasklists controller.rb get monthw...

mysql中IN子查詢排序

這幾天做乙個查詢,需要在乙個指定的結果集中進行查詢,例如 select from table name where doc id in 1dba c20a 907b 其中in子句中的doc id列表是通過呼叫乙個外部介面獲得一組doc id常量列表,然後在本地庫中搜尋符合這個列表的資料 記錄。後來發...