成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

通過索引優(yōu)化MySQL語句的實現(xiàn)方法

數(shù)據(jù)庫 MySQL
如果需要優(yōu)化含ORDER BY的MySQL語句,能否實現(xiàn)呢?答案是肯定的,通過索引,就可以成功實現(xiàn)優(yōu)化含有ORDER BY的MySQL語句

使用索引,可以優(yōu)化含有ORDER BY的MySQL語句,下文就將為您詳細介紹這種優(yōu)化MySQL語句的方法,希望對您學(xué)習(xí)MySQL語句優(yōu)化方面有所幫助。

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

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

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

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

4、當你的程序和數(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。

MySQL語句優(yōu)化例子:

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];

這個語句如果你采用第二個例子中建立索引的方法,會得不到預(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)用表達式(函數(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看看效果。

 

 

 

【編輯推薦】

mysql UPDATE語句的使用方法

MySQL設(shè)置自增字段的方法介紹

常見MySql字段的默認長度

MySQL中INSERT的一般用法

mysql UPDATE語句的使用方法

 

 

責(zé)任編輯:段燃 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2010-10-12 16:44:36

MySQL語句

2010-05-21 11:22:04

2019-08-14 15:18:55

MySQLSQL數(shù)據(jù)庫

2011-06-14 10:43:44

索引

2016-12-12 13:07:57

數(shù)據(jù)庫優(yōu)化SQL

2010-05-31 10:26:27

2010-05-27 15:34:30

MySQL語句優(yōu)化

2020-10-19 19:45:58

MySQL數(shù)據(jù)庫優(yōu)化

2018-03-29 19:45:47

數(shù)據(jù)庫MySQL查詢優(yōu)化

2017-07-25 12:07:14

MySQL索引SQL

2021-07-16 23:01:03

SQL索引性能

2018-06-07 08:54:01

MySQL性能優(yōu)化索引

2010-05-12 11:14:25

MySQL SQL優(yōu)化

2010-05-12 10:29:51

MySQL數(shù)據(jù)庫

2018-04-09 14:25:06

數(shù)據(jù)庫MySQL索引

2021-07-26 18:23:23

SQL策略優(yōu)化

2024-04-17 12:58:15

MySQL索引數(shù)據(jù)庫

2017-09-01 21:00:05

MySQLSQL優(yōu)化查詢方法

2012-04-28 09:28:43

MySQL數(shù)據(jù)庫數(shù)據(jù)庫優(yōu)化

2024-10-09 23:32:50

點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美三级在线 | 精品久久久久国产 | 自拍 亚洲 欧美 老师 丝袜 | 精品在线视频播放 | 亚洲视频二区 | 久久综合成人精品亚洲另类欧美 | 日本二区在线观看 | 日本三级电影在线免费观看 | 成人亚洲精品 | 亚洲视频在线免费观看 | 国产精品久久国产精品 | 免费电影av | 久久精品久久久久久 | 成人黄色av网址 | 国产精品性做久久久久久 | 日韩一区二区黄色片 | 高清一区二区三区 | 国产小视频在线观看 | 91免费电影 | 亚洲综合在线一区二区 | 日本久久网 | 中文字幕在线看 | 18av在线播放 | 久久99精品久久久久久琪琪 | 欧美极品视频 | 精品在线免费观看视频 | 国产精品美女久久久久久免费 | 精品一区二区三区电影 | av在线二区 | 精品久久亚洲 | 国产成人99久久亚洲综合精品 | 一级一片在线观看 | 国产精品a一区二区三区网址 | 99久久国产| 亚洲激情一区二区三区 | 天天艹逼网 | 精品国产一区二区在线 | 国产精品入口久久 | 伊人91在线| 亚洲国产18| 视频1区2区 |