日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
MySQL數(shù)據(jù)庫(kù)優(yōu)化中要用到哪些語(yǔ)句?

以下的文章主要介紹的是MySQL數(shù)據(jù)庫(kù)優(yōu)化的實(shí)際操作以及相關(guān)推薦,前面我們也講過(guò)一些相關(guān)的優(yōu)化操作策略,我們今天就一起來(lái)看看MySQL數(shù)據(jù)庫(kù)優(yōu)化中Group BY 語(yǔ)句、 Order By語(yǔ)句 等。

創(chuàng)新互聯(lián)是一家專業(yè)提供望花企業(yè)網(wǎng)站建設(shè),專注與成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、HTML5建站、小程序制作等業(yè)務(wù)。10年已為望花眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。

優(yōu)化GROUP BY語(yǔ)句

默認(rèn)情況下,MySQL對(duì)所有GROUP BY col1,col2...的字段進(jìn)行排序。這與在查詢中指定ORDER BY col1,col2...類似。因此,如果顯式包括一個(gè)包含相同的列的ORDER BY子句,則對(duì)MySQL的實(shí)際執(zhí)行性能沒(méi)有什么影響。 如果查詢包括GROUP BY 但用戶想要避免排序結(jié)果的消耗,則可以指定ORDER By NULL禁止排序,例如:

引用

 
 
 
  1. explain select id, sum(moneys) from sales2 group by id \G 
  2. explain select id, sum(moneys) from sales2 group by id order by null \G 

你可以通過(guò)比較發(fā)現(xiàn)第一條語(yǔ)句會(huì)比第二句在Extra:里面多了Using filesort.而恰恰filesort是最耗時(shí)的。

MySQL數(shù)據(jù)庫(kù)優(yōu)化ORDER BY語(yǔ)句

在某些情況中,MySQL可以使用一個(gè)索引來(lái)滿足ORDER BY子句,而不需要額外的排序。WHERE 條件和 ORDER BY使用相同的索引,并且ORDER BY的順序和索引順序相同,并且ORDER BY的字段都是升序或者都是降序。

例如:

引用

 
 
 
  1. SELECT * FROM t1 ORDER BY key_part1,key_part2,....: 
  2. SELECT * FROM t1 WHERE key_part1 = 1 ORDER BY key_part1 DESC,key_part2 DESC; 
  3. SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 DESC; 

但是以下的情況不使用索引:

引用

 
 
 
  1. SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC; 

ORDER by的字段混合ASC 和 DESC

 
 
 
  1. SELECT * FROM t1 WHERE key2=constant ORDER BY key1; 

用于查詢行的關(guān)鍵字與ORDER BY 中所使用的不相同

 
 
 
  1. SELECT * FROM t1 ORDER BY key1, key2; 

對(duì)不同的關(guān)鍵字使用ORDER BY

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

MySQL4.1開(kāi)始支持SQL的子查詢。這個(gè)技術(shù)可以使用SELECT語(yǔ)句來(lái)創(chuàng)建一個(gè)單列的查詢結(jié)果,然后把這個(gè)查詢結(jié)果作為過(guò)濾條件用在另一個(gè)查詢中,使用子查詢可以一次性地完成多邏輯上需要多個(gè)步驟才能完成的SQL操作,同時(shí)也可以避免事務(wù)或者表鎖死,并且些起來(lái)也很容易。但是,有些情況下,子查詢可以被更有效的連接(JOIN)替代。
例如:

引用

 
 
 
  1. explain select * from sales2 where company_id not in(select id from company2) \G 
  2. explain select * from sales2 left join comany2 on sales2.company_id = 
    company2.id where sales2.company_id is null \G; 

第一句看起來(lái)比第二句更簡(jiǎn)潔,但是第二句比第一就更快。因?yàn)槭褂肑OIN來(lái)完成這個(gè)查詢,速度比較快,尤其如果對(duì)compay2表中的id建立了索引的話,那么性能將會(huì)更好。那為什么在這種情況下使用JOIN會(huì)更有效率呢。因?yàn)镸ySQL不需要在內(nèi)存中創(chuàng)建臨時(shí)表來(lái)完成這個(gè)邏輯上需要兩個(gè)步驟的查詢工作。

優(yōu)化OR條件

對(duì)于含有OR的查詢子句,如果要利用索引,則OR之間的每個(gè)條件列都必須用到索引;如果沒(méi)有索引,則考慮增加索引。

使用SQL提示

SQL 提示(SQL HINT)是MySQL數(shù)據(jù)庫(kù)優(yōu)化數(shù)據(jù)庫(kù)的一個(gè)重要手段,簡(jiǎn)單來(lái)說(shuō)就是在SQL語(yǔ)句中加入一些人為的提示來(lái)達(dá)到優(yōu)化的操作的目的。
例如:

引用

 
 
 
  1. SELECT SQL_BUFFER_RESULTS * FROM ... 

這個(gè)語(yǔ)句將強(qiáng)制MySQL生成一個(gè)臨時(shí)結(jié)果集。只要臨時(shí)結(jié)果集生成后,所有表上的鎖定均被釋放。這能在遇到表鎖定問(wèn)題時(shí)或者要花很長(zhǎng)時(shí)間將結(jié)果傳給客戶端時(shí)所幫助,因?yàn)榭梢员M快釋放鎖資源,

下面是一些在MySQL中常用的SQL提示。

引用

1. USE INDEX
在查詢語(yǔ)句中表名的后面,添加USE INDEX 來(lái)提供希望MySQL去參考的索引列表,就可以讓MySQL不再考慮其他可用的索引。

引用

 
 
 
  1. explain select * from sales2 use index (ind_sales2_id) where id 3 \G; 

2. IGNORE INDEX

如果用戶只是單純地想讓MySQL忽略一個(gè)或者多個(gè)索引,則可以使用IGNORE INDEX 作為HINT

3. FORCE INDEX

為強(qiáng)制MySQL使用一個(gè)特定的索引,可在查詢中使用FORCE INDEX作為HINT。例如當(dāng)不強(qiáng)制使用索引的時(shí)候,因?yàn)閕d的值都是大于0的,因?yàn)镸ySQL會(huì)默認(rèn)進(jìn)行全表掃描,而不使用索引。例如:

引用

 
 
 
  1. expalin select * from sales2 where id > 0 \G; 

但是,當(dāng)使用FORCE INDEX進(jìn)行提示時(shí),即便使用索引的效率不是很高,MySQL還是選擇使用了索引,這是MySQL留給用戶的一個(gè)自行選擇執(zhí)行計(jì)劃的權(quán)利。加入FORCE INDEX提示后在執(zhí)行上面的SQL

引用

 
 
 
  1. explain select * from sales2 force index(index_sales2_id) where id > 0 \G; 

文章題目:MySQL數(shù)據(jù)庫(kù)優(yōu)化中要用到哪些語(yǔ)句?
當(dāng)前地址:http://m.5511xx.com/article/cdciiod.html