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

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

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

關于建立索引的幾個準則:

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

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

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

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

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

一個很容易犯的錯誤:

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

例子:

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

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

幾個常用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];

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

這個語句怎么優(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)驗證,這個方法根本行不通,效率反而更低,測試時對于大部分應用強制指定使用排序索引效果更好點

4、不要再WHERE和ORDER BY的欄位上應用表達式(函數(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處理排序的機制造成的。

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

相關文章

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

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

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

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

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

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

    MySQL Workbench是一款專為MySQL設計的ER/數(shù)據(jù)庫建模工具,它是著名的數(shù)據(jù)庫設計工具DBDesigne4的繼任者,可以通過MySQL Workbench設計和創(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ù)結構,就像一本書的目錄就是一個索引,下面這篇文章主要給大家介紹了關于MySQL二級索引查詢過程的相關資料,需要的朋友可以參考下
    2022-02-02
  • MySQL數(shù)據(jù)庫備份和還原的常用命令小結

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

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

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

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

    MySQL PHP語法淺析

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

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

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

最新評論

华阴市| 婺源县| 柘城县| 砀山县| 泰和县| 长春市| 湘西| 甘洛县| 奉贤区| 甘孜县| 淄博市| 凤台县| 陇南市| 商城县| 石屏县| 许昌县| 雷山县| 崇阳县| 库尔勒市| 格尔木市| 梁山县| 湾仔区| 七台河市| 百色市| 咸阳市| 平武县| 昌吉市| 牡丹江市| 太湖县| 萍乡市| 嘉鱼县| 炉霍县| 广州市| 凤凰县| 沂源县| 平潭县| 天门市| 桓台县| 滦平县| 哈密市| 吴堡县|