国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數(shù)據(jù)庫技術|

服務器之家 - 數(shù)據(jù)庫 - Mysql - MySQL 通過索引優(yōu)化含ORDER BY的語句

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

2019-11-06 13:42mysql教程網(wǎng) Mysql

合理的建立索引能夠加速數(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看看效果。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美激情亚洲 | 国产精品一区二区无线 | 国产午夜视频在线观看 | 欧美激情在线播放 | 51ⅴ精品国产91久久久久久 | av在线免费观看一区二区 | 台湾黄色网| 久久久久国产一区二区三区四区 | 久久久久久久久久久久一区二区 | 成人午夜免费视频 | 午夜免费福利视频 | 欧美中文字幕一区二区三区 | 狠狠的日 | 国产一级一级国产 | 亚洲视屏 | 国产亚洲一区二区三区 | 国产中文字幕一区 | 精品国产99 | 一区二区三区视频在线观看 | 亚洲国产精品久久人人爱 | 蜜桃视频网站入口 | xxxx网 | av看片 | 伊人五月天在线 | 国产精品一区在线观看 | 91亚洲国产成人久久精品网站 | 四季久久免费一区二区三区四区 | 日本天天操 | 成人国产免费视频 | 亚洲精品国产a久久久久久 99热少妇 | 久久久999精品视频 亚洲国产网站 | 久久91av | 色av综合网| 亚洲成av人片在线观看无码 | 国产精品久久久久久亚洲调教 | 久久久精品免费视频 | 成人影视免费 | 成人免费视频在线观看 | 日韩在线精品强乱中文字幕 | 亚洲天堂五码 | 午夜免费视频网站 |