国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

mysql織夢索引優(yōu)化之MySQL Order By索引優(yōu)化

這篇具有很好參考價值的文章主要介紹了mysql織夢索引優(yōu)化之MySQL Order By索引優(yōu)化。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

在一些情況下,MySQL可以直接使用索引來滿足一個ORDER BY 或GROUP BY 子句而無需做額外的排序。盡管ORDER BY 不是和索引的順序準確匹配,索引還是可以被用到,只要不用的索引部分和所有的額外的ORDER BY 字段在WHERE 子句中都被包括了。

使用索引的MySQL Order By

下列的幾個查詢都會使用索引來解決ORDER BY 或GROUP BY 部分:

SELECT * FROM t1 ORDER BY key_part1,key_part2,... ;

SELECT * FROM t1 WHERE key_part1=constant ORDER BY key_part2;

SELECT * FROM t1 WHERE key_part1=constant GROUP BY key_part2;

SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 DESC;

SELECT * FROM t1 WHERE key_part1=1 ORDER BY key_part1 DESC, key_part2 DESC;

不使用索引的MySQL Order By

在另一些情況下,MySQL無法使用索引來滿足ORDER BY,盡管它會使用索引來找到記錄來匹配WHERE 子句。這些情況如下:

* 對不同的索引鍵做ORDER BY :

SELECT * FROM t1 ORDER BY key1, key2;

* 在非連續(xù)的索引鍵部分上做ORDER BY:

SELECT * FROM t1 WHERE key2=constant ORDER BY key_part2;

* 同時使用了ASC 和DESC:

SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC;

* 用于搜索記錄的索引鍵和做ORDER BY 的不是同一個:

SELECT * FROM t1 WHERE key2=constant ORDER BY key1;

* 有很多表一起做連接,而且讀取的記錄中在ORDER BY 中的字段都不全是來自第一個非常數(shù)的表中(也就是說,在EXPLAIN 分析的結果中的第一個表的連接類型不是const)。

* 使用了不同的ORDER BY 和GROUP BY 表達式。

* 表索引中的記錄不是按序存儲。例如,HASH 和HEAP 表就是這樣。

通過執(zhí)行EXPLAIN SELECT ... ORDER BY,就知道MySQL是否在查詢中使用了索引。如果Extra 字段的值是Using filesort,則說明MySQL無法使用索引。詳情請看"7.2.1 EXPLAIN Syntax (Get Information About a SELECT)"。當必須對結果進行排序時,MySQL 4.1以前 它使用了以下filesort 算法:

1. 根據(jù)索引鍵讀取記錄,或者掃描數(shù)據(jù)表。那些無法匹配WHERE 分句的記錄都會被略過。

2. 在緩沖中每條記錄都用一個‘對’存儲了2個值(索引鍵及記錄指針)。緩沖的大小依據(jù)系統(tǒng)變量sort_buffer_size 的值而定。

3. 當緩沖慢了時,就運行qsort(快速排序)并將結果存儲在臨時文件中。將存儲的塊指針保存起來(如果所有的‘對’值都能保存在緩沖中,就無需創(chuàng)建臨時文件了)。

4. 執(zhí)行上面的操作,直到所有的記錄都讀取出來了。

5. 做一次多重合并,將多達MERGEBUFF(7)個區(qū)域的塊保存在另一個臨時文件中。重復這個操作,直到所有在第一個文件的塊都放到第二個文件了。

6. 重復以上操作,直到剩余的塊數(shù)量小于MERGEBUFF2 (15)。

7. 在最后一次多重合并時,只有記錄的指針(排序索引鍵的最后部分)寫到結果文件中去。

8. 通過讀取結果文件中的記錄指針來按序讀取記錄。想要優(yōu)化這個操作,MySQL將記錄指針讀取放到一個大的塊里,并且使用它來按序讀取記錄,將記錄放到緩沖中。緩沖的大小由系統(tǒng)變量read_rnd_buffer_size 的值而定。這個步驟的代碼在源文件`sql/records.cc' 中。

這個逼近算法的一個問題是,讀取了2次記錄:一次是估算WHERE 分句時,第二次是排序時。盡管第一次都成功讀取記錄了(例如,做了一次全表掃描),第二次是隨機的讀取(索引鍵已經(jīng)排好序了,但是記錄并沒有)。在MySQL 4.1 及更新版本中,filesort 優(yōu)化算法用于記錄中不只包括索引鍵值和記錄的位置,還包括查詢中要求的字段。這么做避免了需要2次讀取記錄。改進的filesort 算法做法大致如下:

1. 跟以前一樣,讀取匹配WHERE 分句的記錄。

2. 相對于每個記錄,都記錄了一個對應的;‘元組’信息信息,包括索引鍵值、記錄位置、以及查詢中所需要的所有字段。

3. 根據(jù)索引鍵對‘元組’信息進行排序。

4. 按序讀取記錄,不過是從已經(jīng)排序過的‘元組’列表中讀取記錄,而非從數(shù)據(jù)表中再讀取一次。

使用改進后的filesort 算法相比原來的,‘元組’比‘對’需要占用更長的空間,它們很少正好適合放在排序緩沖中(緩沖的大小是由sort_buffer_size 的值決定的)。因此,這就可能需要有更多的I/O操作,導致改進的算法更慢。為了避免使之變慢,這種優(yōu)化方法只用于排序‘元組’中額外的字段的大小總和超過系統(tǒng)變量max_length_for_sort_data 的情況(這個變量的值設置太高的一個表象就是高磁盤負載低CPU負載)。想要提高ORDER BY 的速度,首先要看MySQL能否使用索引而非額外的排序過程。如果不能使用索引,可以試著遵循以下策略:

* 增加sort_buffer_size 的值。

* 增加read_rnd_buffer_size 的值。

* 修改tmpdir,讓它指向一個有很多剩余空間的專用文件系統(tǒng)。

如果使用MySQL 4.1或更新,這個選項允許有多個路徑用循環(huán)的格式。各個路徑之間在Unix 上用冒號(':')分隔開來,在Windows,NetWare以及OS/2 上用分號(';')??梢岳眠@個特性將負載平均分攤給幾個目錄。注意:這些路徑必須是分布在不同物理磁盤上的目錄,而非在同一個物理磁盤上的不同目錄
?文章來源地址http://www.zghlxwxcb.cn/news/detail-441093.html

到了這里,關于mysql織夢索引優(yōu)化之MySQL Order By索引優(yōu)化的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • mysql中order by多個字段 order by字段可以為空嗎

    在MySQL中,要使用“ORDER BY”語句來進行多字段排序,必須先將多個字段的名稱按照順序排列放在“ORDER BY”后面,然后按照每個字段單獨的排序規(guī)則進行排序。 排序字段的順序按照order by語句中的先后順序進行, 先根據(jù)第一個排序字段排序 ,如果有相同的值,則根據(jù)第二個

    2024年02月03日
    瀏覽(22)
  • mysql GROUP BY 怎么 order by 排序

    在 MySQL 中使用 GROUP BY 子句時,如果需要對結果進行排序,可以使用 ORDER BY 子句來對分組后的結果進行排序。 ORDER BY 子句應該放在 GROUP BY 子句之后,使用逗號來分隔需要排序的列,并在排序列后指定排序順序。例如: 在這個例子中,SELECT 語句選擇了表 table1 中的列 column1 和

    2024年02月16日
    瀏覽(17)
  • MySQL實戰(zhàn)解析底層---“order by“是怎么工作的

    MySQL實戰(zhàn)解析底層---“order by“是怎么工作的

    目錄 前言 全字段排序 rowid排序 全字段排序 VS rowid排序 前言 在開發(fā)應用的時候,一定會經(jīng)常碰到需要根據(jù)指定的字段排序來顯示結果的需求 以舉例市民表為例,假設你要查詢城市是“杭州”的所有人名字,并且按照姓名排序返回前1000個人的姓名、年齡 假設這個表的部分定

    2024年02月10日
    瀏覽(24)
  • MySQL使用SELECT 語句不加ORDER BY默認是如何排序的?

    MySQL使用SELECT 語句不加ORDER BY默認是如何排序的?

    大家好,我是阿飛云 怕什么真理無窮,進一步有近一步的歡喜 記錄一個 MySQL 查詢排序的問題,一個SQL語句沒有加 order by ,那么查詢出來的結果到底是按照什么規(guī)則排序的呢?查詢了網(wǎng)上的一些資料,分享如下: ?MyISAM 表 MySQL Select 默認排序是按照物理存儲順序顯示的(不

    2024年02月10日
    瀏覽(24)
  • MySQL 數(shù)據(jù)庫查詢與數(shù)據(jù)操作:使用 ORDER BY 排序和 DELETE 刪除記錄

    使用 ORDER BY 語句按升序或降序對結果進行排序。 ORDER BY 默認按升序排序。要按降序排序結果,使用 DESC 。 示例按名稱按字母順序排序結果: ORDER BY DESC 使用 DESC 以降序排序結果。 示例按名稱以字母逆序排序結果: 您可以使用\\\"DELETE FROM\\\"語句從現(xiàn)有表格中

    2024年02月05日
    瀏覽(39)
  • Mysql 中,為什么 WHERE 使用別名會報錯,而 ORDER BY 不會報錯?

    ? ?我們先對salary * 12 命名一個別名annual_sal ?這段代碼以annual_sal升序輸出且正常執(zhí)行沒有報錯。說明 order by 可以使用別名 ?我們再看看這個段代碼 這段代碼就報錯了,報錯說明是 Unknown column \\\'annual_sal\\\' in \\\'where clause\\\'。 由此可以得出where語句執(zhí)行是找不到annual_sal. 要解決這個問

    2023年04月15日
    瀏覽(23)
  • 【MySQL】union (all) 后 order by 子查詢排序不生效問題解決方案

    2308. 按性別排列表格 表:Genders Column Name Type user_id int gender varchar user_id 是該表的主鍵(具有唯一值的列)。 gender 的值是 ‘female’,‘male’,‘other’ 之一。 該表中的每一行都包含用戶的 ID 及其性別。 表格中 ‘female’,‘male’,‘other’ 數(shù)量相等。 編寫一個解決方案以重新

    2024年01月17日
    瀏覽(37)
  • 玩轉Mysql系列 - 第8篇:詳解排序和分頁(order by & limit),及存在的坑

    這是Mysql系列第7篇。 環(huán)境:mysql5.7.25,cmd命令中進行演示。 代碼中被[]包含的表示可選,|符號分開的表示可選其一。 本章內(nèi)容 詳解排序查詢 詳解limit limit存在的坑 分頁查詢中的坑 排序查詢(order by) 電商中:我們想查看今天所有成交的訂單,按照交易額從高到低排序,此

    2024年02月11日
    瀏覽(20)
  • mysql8之前如何實現(xiàn)row_number() over(partition by xxx order by xxx asc/desc)

    mysql8之前如何實現(xiàn)row_number() over(partition by xxx order by xxx asc/desc)

    最近筆者在進行對廣告業(yè)務的數(shù)據(jù)統(tǒng)計時遇到這種情況,業(yè)務方嫌棄離線數(shù)倉太慢,又無需太高的實時性本該使用即席查詢的OLAP去做,但是當前公司調(diào)研的OLAP還沒有推到廣告業(yè)務側,無奈只得使用mysql暫時頂一下。我們當前使用的是mysql5.7。 一充用戶 :當日只有一次充值的

    2024年02月05日
    瀏覽(19)
  • SQL優(yōu)化(3):order by優(yōu)化

    SQL優(yōu)化(3):order by優(yōu)化

    MySQL的排序,有兩種方式: Using filesort : 通過表的索引或全表掃描,讀取滿足條件的數(shù)據(jù)行,然后在排序緩沖區(qū)sort buffer中完成排序操作,所有不是通過索引直接返回排序結果的排序都叫 FileSort 排序。 Using index : 通過有序索引順序掃描直接返回有序數(shù)據(jù),這種情況即為 using

    2024年02月01日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包