最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL 通過索引優(yōu)化含ORDER BY的語句

 更新時間:2010年03月16日 21:25:37   作者:  
合理的建立索引能夠加速數(shù)據(jù)讀取效率,不合理的建立索引反而會拖慢數(shù)據(jù)庫的響應(yīng)速度。

關(guān)于建立索引的幾個準(zhǔn)則:

1、合理的建立索引能夠加速數(shù)據(jù)讀取效率,不合理的建立索引反而會拖慢數(shù)據(jù)庫的響應(yīng)速度。

2、索引越多,更新數(shù)據(jù)的速度越慢。

3、盡量在采用MyIsam作為引擎的時候使用索引(因為MySQL以BTree存儲索引),而不是InnoDB。但MyISAM不支持Transcation。

4、當(dāng)你的程序和數(shù)據(jù)庫結(jié)構(gòu)/SQL語句已經(jīng)優(yōu)化到無法優(yōu)化的程度,而程序瓶頸并不能順利解決,那就是應(yīng)該考慮使用諸如memcached這樣的分布式緩存系統(tǒng)的時候了。

5、習(xí)慣和強迫自己用EXPLAIN來分析你SQL語句的性能。

一個很容易犯的錯誤:

不要在選擇的欄位上放置索引,這是無意義的。應(yīng)該在條件選擇的語句上合理的放置索引,比如where,order by。

例子:

SELECT id,title,content,cat_id FROM article WHERE cat_id = 1;

上面這個語句,你在id/title/content上放置索引是毫無意義的,對這個語句沒有任何優(yōu)化作用。但是如果你在外鍵cat_id上放置一個索引,那作用就相當(dāng)大了。

幾個常用ORDER BY語句的MySQL優(yōu)化:

1、ORDER BY + LIMIT組合的索引優(yōu)化。如果一個SQL語句形如:

SELECT [column1],[column2],.... FROM [TABLE] ORDER BY [sort] LIMIT [offset],[LIMIT];

這個SQL語句優(yōu)化比較簡單,在[sort]這個欄位上建立索引即可。

2、WHERE + ORDER BY + LIMIT組合的索引優(yōu)化,形如:

SELECT [column1],[column2],.... FROM [TABLE] WHERE [columnX] = [value] ORDER BY [sort] LIMIT[offset],[LIMIT];

這個語句,如果你仍然采用第一個例子中建立索引的方法,雖然可以用到索引,但是效率不高。更高效的方法是建立一個聯(lián)合索引(columnX,sort)

3、WHERE + IN + ORDER BY + LIMIT組合的索引優(yōu)化,形如:

SELECT [column1],[column2],.... FROM [TABLE] WHERE [columnX] IN ([value1],[value2],...) ORDER BY[sort] LIMIT [offset],[LIMIT];

這個語句如果你采用第二個例子中建立索引的方法,會得不到預(yù)期的效果(僅在[sort]上是using index,WHERE那里是using where;using filesort),理由是這里對應(yīng)columnX的值對應(yīng)多個。

這個語句怎么優(yōu)化呢?我暫時沒有想到什么好的辦法,看到網(wǎng)上有便宜提供的辦法,那就是將這個語句用UNION分拆,然后建立第二個例子中的索引:

SELECT [column1],[column2],.... FROM [TABLE] WHERE [columnX]=[value1] ORDER BY [sort] LIMIT[offset],[LIMIT]
UNION
SELECT [column1],[column2],.... FROM [TABLE] WHERE [columnX]=[value2] ORDER BY [sort] LIMIT[offset],[LIMIT]
UNION
……

但經(jīng)驗證,這個方法根本行不通,效率反而更低,測試時對于大部分應(yīng)用強制指定使用排序索引效果更好點

4、不要再WHERE和ORDER BY的欄位上應(yīng)用表達(dá)式(函數(shù)),比如:

SELECT * FROM [table] ORDER BY YEAR(date) LIMIT 0,30;

5、WHERE+ORDER BY多個欄位+LIMIT,比如

SELECT * FROM [table] WHERE uid=1 ORDER x,y LIMIT 0,10;

對于這個語句,大家可能是加一個這樣的索引(x,y,uid)。但實際上更好的效果是(uid,x,y)。這是由MySQL處理排序的機制造成的。

以上例子你在實際項目中應(yīng)用的時候,不要忘記在添加索引后,用EXPLAIN看看效果。

相關(guān)文章

  • MySQL 8.0.20 Window10免安裝版配置及Navicat管理教程圖文詳解

    MySQL 8.0.20 Window10免安裝版配置及Navicat管理教程圖文詳解

    這篇文章主要介紹了MySQL 8.0.20 Window10免安裝版配置及Navicat管理,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • MySQL執(zhí)行時間的查詢

    MySQL執(zhí)行時間的查詢

    這篇文章主要介紹了MySQL執(zhí)行時間的查詢,查詢頻繁的數(shù)據(jù)庫和查詢執(zhí)行時間長的sql,文章中有詳細(xì)的代碼實例,感興趣的同學(xué)可以參考閱讀
    2023-04-04
  • 使用mysql workbench自動生成ER圖的實現(xiàn)步驟

    使用mysql workbench自動生成ER圖的實現(xiàn)步驟

    MySQL Workbench是一款專為MySQL設(shè)計的ER/數(shù)據(jù)庫建模工具,它是著名的數(shù)據(jù)庫設(shè)計工具DBDesigne4的繼任者,可以通過MySQL Workbench設(shè)計和創(chuàng)建新的數(shù)據(jù)庫圖示,本文給大家介紹了使用mysql workbench自動生成ER圖的實現(xiàn)步驟,需要的朋友可以參考下
    2024-06-06
  • MySQL8.0新特性之支持原子DDL語句

    MySQL8.0新特性之支持原子DDL語句

    這MySQL 8.0開始支持原子數(shù)據(jù)定義語言(DDL)語句。此功能稱為原子DDL。這篇文章主要介紹了MySQL8.0新特性——支持原子DDL語句,需要的朋友可以參考下
    2018-07-07
  • 利用tcpdump對mysql進行抓包操作技巧

    利用tcpdump對mysql進行抓包操作技巧

    利用tcpdump對mysql進行抓包操作,命令簡單,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2016-12-12
  • 一文了解MySQL二級索引的查詢過程

    一文了解MySQL二級索引的查詢過程

    索引是一種用于快速查詢行的數(shù)據(jù)結(jié)構(gòu),就像一本書的目錄就是一個索引,下面這篇文章主要給大家介紹了關(guān)于MySQL二級索引查詢過程的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • MySQL數(shù)據(jù)庫備份和還原的常用命令小結(jié)

    MySQL數(shù)據(jù)庫備份和還原的常用命令小結(jié)

    MySQL數(shù)據(jù)庫備份和還原的常用命令小結(jié),學(xué)習(xí)mysql的朋友可以參考下
    2012-03-03
  • MyCat環(huán)境搭建詳細(xì)教程

    MyCat環(huán)境搭建詳細(xì)教程

    這篇文章主要介紹了MyCat環(huán)境搭建詳細(xì)教程的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • MySQL PHP語法淺析

    MySQL PHP語法淺析

    在本篇文章里小編給大家分享了關(guān)于MySQL PHP語法的相關(guān)知識點,需要的朋友們學(xué)習(xí)參考下。
    2019-02-02
  • SQL優(yōu)化老出錯,那是你沒弄明白MySQL解釋計劃用法

    SQL優(yōu)化老出錯,那是你沒弄明白MySQL解釋計劃用法

    本篇文章講的是SQL優(yōu)化老出錯,那是你沒弄明白MySQL解釋計劃用法,有興趣的小伙伴速度來看看吧,希望本篇文章能夠幫助到你
    2021-11-11

最新評論

梧州市| 电白县| 临邑县| 柘荣县| 香河县| 哈巴河县| 自贡市| 淳化县| 新巴尔虎左旗| 图木舒克市| 建平县| 南靖县| 七台河市| 黎平县| 环江| 凤城市| 沈阳市| 和政县| 镇原县| 聊城市| 黔江区| 玉山县| 华蓥市| 赤水市| 琼中| 太和县| 武城县| 西华县| 东港市| 漯河市| 澄城县| 古浪县| 开鲁县| 灵石县| 台东市| 贵溪市| 冷水江市| 松潘县| 红安县| 梅河口市| 衡南县|