欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

mysql優(yōu)化和索引

  • 表的優(yōu)化

    成都創(chuàng)新互聯(lián)是一家專注于網(wǎng)站制作、網(wǎng)站建設(shè)與策劃設(shè)計(jì),宣州網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:宣州等地區(qū)。宣州做網(wǎng)站價(jià)格咨詢:13518219792

1.定長(zhǎng)與變長(zhǎng)分離

    如 int,char(4),time核心且常用字段,建成定長(zhǎng),放在一張表;

    而varchar,text,blob這種變長(zhǎng)字段適合單放一張表,用主鍵與核心表關(guān)聯(lián)。

2.常用字段和不常用字段要分離

3.在 1 對(duì)多需要關(guān)聯(lián)統(tǒng)計(jì)的字段上,添加冗余字段。

  • 列類型選擇原則

1.字段類型優(yōu)先級(jí)  整型 > date,time > enum,char > varchar > blob,text

2.夠用就行,不要慷慨,大的字段浪費(fèi)內(nèi)存,影響速度。

3.盡量避免用NULL,NULL不利于索引,需要特殊的字節(jié)來標(biāo)注。

  • Enum列的說明

1.enum列在內(nèi)部是用整型來存儲(chǔ)的

2.enum列和enum列想關(guān)聯(lián)速度最快

3.enum列比(var)char的弱勢(shì)--在碰到與char關(guān)聯(lián)時(shí),要轉(zhuǎn)化,要花時(shí)間

4.優(yōu)勢(shì)---當(dāng)char非常長(zhǎng)時(shí),enum依然是整型固定長(zhǎng)度,當(dāng)查詢的數(shù)據(jù)量越大時(shí)。enum的優(yōu)勢(shì)越明顯。

  • 索引優(yōu)化

B-tree索引:myisam,innodb中默認(rèn)使用B-tree索引。

hash索引:在memory表里,默認(rèn)使用hash索引。

hash優(yōu)缺點(diǎn):1.查詢時(shí)間復(fù)雜度為O(1)。

            2.hash計(jì)算的結(jié)果是隨機(jī)的,在磁盤上也是隨機(jī)放置。

            3.無(wú)法對(duì)范圍查詢進(jìn)行優(yōu)化;

            4.無(wú)法利用前綴索引;

            5.排序也無(wú)法優(yōu)化;

           6.必須回行,就是說,通過索引拿到數(shù)據(jù)位置必須回到表中取數(shù)據(jù)。

在where條件常用的列上都加上索引,若是獨(dú)立的索引,同時(shí)只能用上1個(gè)。

若建立多列索引,index(a,b,c),注意和順序有關(guān),索引發(fā)揮作用,需要滿足左前綴要求。

索引在where,order by,group by 中會(huì)用上(滿足左前綴要求)。

多列索引在實(shí)際應(yīng)用中更加實(shí)用,注意在建立多列索引的時(shí)候,要結(jié)合實(shí)際,創(chuàng)建合理的索引。

索引提高查詢的速度、提高排序的速度、提高分組查詢的速度。

  • 聚簇索引和非聚簇索引

聚簇索引:btree 

          innodb引擎,索引和數(shù)據(jù)是在一塊的,

          innodb直接在主鍵索引的樹中,儲(chǔ)存行的數(shù)據(jù),(既存儲(chǔ)了主鍵值,又存儲(chǔ)了行數(shù)據(jù))。

          innodb次索引指向?qū)χ麈I的引用。

          優(yōu)點(diǎn):根據(jù)主鍵查詢條目比較少時(shí),不用回行(數(shù)據(jù)就在主鍵節(jié)點(diǎn)下)。

          缺點(diǎn):如果碰到不規(guī)則數(shù)據(jù)插入時(shí),造成頻繁的頁(yè)分裂。

非聚簇索引:btree 

            myisam引擎, 索引和數(shù)據(jù)是分開的,

            myisam索引指向行在磁盤上的位置

            myisam中,主索引和次索引都指向物理行(磁盤位置)。

索引覆蓋:

如果查詢的列恰好是索引的一部分,那么查詢只需要在索引文件上進(jìn)行,不需要回行到磁盤再找數(shù)據(jù)。

索引與排序

  1. 對(duì)于覆蓋索引,直接在索引上查,就是有序的;

  2. 在innodb引擎上,沿著索引的字段排序,也是自然有序的,對(duì)于myisam引擎,按某索引字段排序,但取出的字段包含有不是索引字段,那么會(huì)先取出所有行,再進(jìn)行排序。

  3. 先取出數(shù)據(jù),形成臨時(shí)表,做filesort文件排序(要盡可能避免)。

  4. 爭(zhēng)取目標(biāo):取出來的數(shù)據(jù)本身就是有序的,利用索引來排序。

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

  1. SQL語(yǔ)句的時(shí)間花在等待時(shí)間、執(zhí)行時(shí)間,只有降低執(zhí)行時(shí)間,那其他語(yǔ)句鎖定的時(shí)間也減少了;

  2. SQL語(yǔ)句的執(zhí)行時(shí)間又花在查找、取出;

  3. 如何查詢快?a)聯(lián)合索引的順序、區(qū)分度、長(zhǎng)度 b)取得快,索引覆蓋 c)傳輸?shù)纳伲俚男泻土校?/p>

  4. 切分查詢,將數(shù)據(jù)拆成多次,例:插入10000條數(shù)據(jù),每1000條為單位插入;

  5. 分解查詢,按邏輯把多表連接查詢分成多個(gè)簡(jiǎn)單SQL

    總結(jié):少查,盡量精準(zhǔn)數(shù)據(jù),少取行;必須要查,盡量走在索引上查詢行;取時(shí),取盡量少的列;

  6. 在group時(shí),用帶有索引的列來group,可以避免臨時(shí)表和文件排序,速度會(huì)稍快些,另外用int型比char型分組,也要快些;

  7. 在group時(shí),我們假設(shè)只取了A表的內(nèi)容,group by的列,盡量用A表的列,會(huì)比B表的列要快。

  8. order by的列要和group by 的列一致,否則也會(huì)引起臨時(shí)表,因?yàn)閮烧叨夹枰判颍绻麅烧叩牧胁灰恢拢潜仨毥?jīng)過至少1次排序;

如何判斷查詢是否用到了索引?

查詢方法:  explain  SQL  \G

extra字段:

    using index: 指用到了索引覆蓋,效率非常高;

    using where:指光靠索引還定位不到,還得where判斷一下

    using temporary:指用上了臨時(shí)表,group by 與 order by 不同列時(shí)或 group by 、order by 別的表的列時(shí)

    using filesort:文件排序,文件可能在磁盤,也可能在內(nèi)存。

子查詢

1.from型子查詢

注意:內(nèi)層from語(yǔ)句查到的臨時(shí)表,是沒有索引的,所以from的返回內(nèi)容要盡量少,需要排序,在內(nèi)層先排好序。

2.in型子查詢

MySQL的查詢優(yōu)化器,針對(duì)in型優(yōu)化,被改成exists子查詢的執(zhí)行效果,單行單行的執(zhí)行過濾。當(dāng)外層表越大時(shí),查詢速度越慢。可以用連接查詢來代替子查詢。

limit及翻頁(yè)優(yōu)化

limit offset,N

當(dāng)offset非常大時(shí),效率很低,因?yàn)閙ysql先取offset+N行,返回放棄前offset行,返回N行。

優(yōu)化辦法:

1)從業(yè)務(wù)上去解決,不允許翻過100頁(yè)。例如百度,一般能翻到70多頁(yè)。

2)不用offset,用條件查詢(ID上有索引)

 select * from tablename where id>1000000 limit 2;

3)只查索引,不查數(shù)據(jù),得到ID,再用ID去查具體條目(ID上有索引),這種技巧就是延遲關(guān)聯(lián)

select id,xxx,xxx from tablename inner join (

select id from tablename limit 1000000,2 ) as tmp using(id);

比下面直接查數(shù)據(jù)的方法快,

select id,xxx,xxx from tablename limit 1000000,2;

文章名稱:mysql優(yōu)化和索引
URL鏈接:http://chinadenli.net/article4/gispoe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)商城網(wǎng)站建站公司App設(shè)計(jì)響應(yīng)式網(wǎng)站用戶體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)