java7优化,七、索引优化分析
SQL性能下降的原因
查詢(xún)語(yǔ)句寫(xiě)的不好
索引失效
關(guān)聯(lián)查詢(xún)太多
服務(wù)器調(diào)優(yōu)及各個(gè)參數(shù)的的設(shè)置(緩沖、線(xiàn)程數(shù)等等)
常見(jiàn)的JOIN查詢(xún)
1、SQL的執(zhí)行順序
手寫(xiě)的順序:
真正機(jī)器執(zhí)行的順序:
2、七種join查詢(xún)
最后兩種語(yǔ)法mysql不支持,但是我們可以用union來(lái)聯(lián)合其他的查詢(xún)結(jié)果來(lái)拼湊出最終結(jié)果。
索引
1、什么是索引?
MySQL官方對(duì)索引的定義為:索引(Index)是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。
也可以簡(jiǎn)單理解為“排好序的快速查找數(shù)據(jù)結(jié)構(gòu)”
數(shù)據(jù)本身之外,數(shù)據(jù)庫(kù)還維護(hù)著一個(gè)滿(mǎn)足特定查找算法的數(shù)據(jù)結(jié)構(gòu),這些數(shù)據(jù)結(jié)構(gòu)以某種方式指向數(shù)據(jù),這樣就可以在這些數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上實(shí)現(xiàn)高級(jí)查找算法,這種數(shù)據(jù)結(jié)構(gòu)就是索引。
一般來(lái)說(shuō)索引本身也很大,不可能全部存儲(chǔ)在內(nèi)存中,因此所以往往以索引文件的形式存儲(chǔ)在磁盤(pán)上。
2、索引的優(yōu)勢(shì)和劣勢(shì)
優(yōu)勢(shì)
提高了數(shù)據(jù)檢索的效率,降低了數(shù)據(jù)庫(kù)的IO成本
降低了數(shù)據(jù)排序的成本,降低了CPU的消耗
劣勢(shì)
實(shí)際上索引也是一張表,該表保存了主鍵與索引字段,并指向?qū)嶓w表的記錄,所以索引列也是要占用空間的
雖然索引大大的提高了查詢(xún)速度,但同時(shí)也會(huì)降低更新表的速度,因?yàn)檫M(jìn)行更新表時(shí),MySQL不僅要保存數(shù)據(jù),還要保存一下索引文件每次更新添加了索引列的字段,都會(huì)調(diào)整因?yàn)楦滤鶐?lái)的鍵值變化后的索引信息
3、索引的分類(lèi)
單值索引:即一個(gè)索引只包含單個(gè)列,一個(gè)表可以有多個(gè)單值索引
唯一索引:索引列的值必須唯一但允許有空值
復(fù)合索引:即一個(gè)索引包含多個(gè)列
4、基本語(yǔ)法
創(chuàng)建
CREATE [UNIQUE] INDEX indexName ON table_name(columnname(length))
ALTER table_name ADD [UNIQUE] INDEX indexName ON (columnname(length))
如果時(shí)CHAR、VARCHAR類(lèi)型,length可以小于字段實(shí)際長(zhǎng)度,如果是BLOB和TEXT類(lèi)型,必須指定length
刪除
DROP INDEX [indexName] ON table_name
查看
SHOW INDEX FROM table_name
5、哪些情況需要?jiǎng)?chuàng)建索引?
主鍵自動(dòng)建立唯一索引
頻繁作為查詢(xún)條件的字段應(yīng)該創(chuàng)建索引
查詢(xún)中與其他表關(guān)聯(lián)的字段,外鍵關(guān)系建立索引
頻繁更新的字段不合適創(chuàng)建索引
Where條件里用不到的字段不創(chuàng)建索引
在高并發(fā)下傾向創(chuàng)建組合索引
查詢(xún)中排序的字段,排序字段若通過(guò)索引去訪問(wèn)將大大提高排序速度
查詢(xún)中統(tǒng)計(jì)或者分組的字段
6、哪些情況不需要?jiǎng)?chuàng)建索引?
表記錄太少
經(jīng)常增刪改的表
如果某個(gè)數(shù)據(jù)列包含許多重復(fù)的內(nèi)容,為它建立索引就沒(méi)有太大的實(shí)際效果
總結(jié)
以上是生活随笔為你收集整理的java7优化,七、索引优化分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 十二星座用JAVA怎么,十二星座的“程序
- 下一篇: oracle 查询时间跨度一年,关于时间