自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

通過(guò)索引優(yōu)化MySQL語(yǔ)句的實(shí)例

數(shù)據(jù)庫(kù) MySQL
MySQL索引可以讓我們的數(shù)據(jù)庫(kù)處理效率更高,而且可以通過(guò)索引優(yōu)化MySQL語(yǔ)句,下面就為您介紹一個(gè)這樣的例子,供您參考。

通過(guò)索引,可以優(yōu)化含有ORDER BY的MySQL語(yǔ)句,下面就為您介紹實(shí)現(xiàn)該功能的詳細(xì)方法,如果您對(duì)MySQL語(yǔ)句方面感興趣的話,不妨一看。

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

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

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

3、盡量在采用MyIsam作為引擎的時(shí)候使用索引(因?yàn)镸ySQL以BTree存儲(chǔ)索引),而不是InnoDB。但MyISAM不支持 Transcation。

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

5、習(xí)慣和強(qiáng)迫自己用EXPLAIN來(lái)分析你SQL語(yǔ)句的性能。

一個(gè)很容易犯的錯(cuò)誤:

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

例子:

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

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

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

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

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

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

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

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

這個(gè)MySQL語(yǔ)句,如果你仍然采用第一個(gè)例子中建立索引的方法,雖然可以用到索引,但是效率不高。更高效的方法是建立一個(gè)聯(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];

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

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

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àn)證,這個(gè)方法根本行不通,效率反而更低,測(cè)試時(shí)對(duì)于大部分應(yīng)用強(qiáng)制指定使用排序索引效果更好點(diǎn)

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

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

5、WHERE+ORDER BY多個(gè)欄位+LIMIT,比如

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

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

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

 

 

【編輯推薦】

MySQL用戶權(quán)限的取消

mysql索引比較分析

MySQL索引的用處

mysql索引的不足

MySql連接字符串的說(shuō)明

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

2010-10-08 16:20:35

MySQL語(yǔ)句

2020-10-19 19:45:58

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

2010-05-27 15:34:30

MySQL語(yǔ)句優(yōu)化

2010-05-31 10:26:27

2010-10-14 16:27:56

MySQL隨機(jī)查詢

2016-12-12 13:07:57

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

2017-07-25 12:07:14

MySQL索引SQL

2018-06-07 08:54:01

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

2010-05-12 11:14:25

MySQL SQL優(yōu)化

2018-04-09 14:25:06

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

2024-04-17 12:58:15

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

2012-04-28 09:28:43

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

2024-10-09 23:32:50

2017-09-05 12:44:15

MySQLSQL優(yōu)化覆蓋索引

2011-06-08 15:08:38

MySQLWhere優(yōu)化

2024-03-26 09:29:27

MySQLDDL

2021-11-09 07:59:50

開(kāi)發(fā)

2010-10-12 14:53:31

mysql索引優(yōu)化

2010-06-03 09:24:46

Oracle

2010-05-27 16:12:10

MySQL索引
點(diǎn)贊
收藏

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