mysql 優化(5)索引與排序

排序可能發生2種情況:

1: 對于覆蓋索引,直接在索引上查詢時,就是有順序的,
using index , 也可能是在查詢時候沿著索引字段排序查詢 。 此時排序代價低

2: 先取出數據,形成臨時表做filesort(文件排序,但文件可能在磁盤上,也可能在內存中)

我們的爭取目標—–取出來的數據本身就是有序的!
利用索引來排序.

比如: goods商品表, (cat_id,shop_price)組成聯合索引,

where cat_id=n order by shop_price ,可以利用索引來排序,

select goods_id,cat_id,shop_price from goods order by shop_price;

// using where,按照shop_price索引取出的結果,本身就是有序的.

select goods_id,cat_id,shop_price from goods order by click_count;

// using filesort 用到了文件排序,即取出的結果再次排序

mysim 執行時全找到 然后排序 然后去回行取 只要有索引走索引 其實不大 聯合索引 點擊量 和 id 可以建索引?

innodb 就在葉子底下

重復索引無意義?

冗余索引 提高效率 兩個索引會發揮場合不同 租用不一樣 左鍵;?

索引的碎片和維護

大網站基本不去刪除數據 在磁盤上會產生一個洞; 并且不容易被再次利用的短字節會不容易再次利用?

內存的碎片化 ;

修復漏洞?

在長期的數據更改過程中, 索引文件和數據文件,都將產生空洞,形成碎片.

我們可以通過一個nop操作(不產生對數據實質影響的操作),
來修改表.

比如: 表的引擎為innodb ,
可以 alter table xxx engine innodb 本質上對數據并沒有任何影響 來修改表 但是會重新整理一遍數據

optimize table 表名 ,也可以修復. 優化這張表 幫你去修復 ;?

注意: 修復表的數據及索引碎片,就會把所有的數據文件重新整理一遍,使之對齊.

這個過程,如果表的行數比較大,也是非常耗費資源的操作.

所以,不能頻繁的修復. 周期較長一點!!!!

如果表的update操作很頻率,可以按周/月,來修復.

如果不頻繁,可以更長的周期來做修復.

?以上就是mysql 優化(5)索引與排序的內容,更多相關內容請關注PHP中文網(www.php.cn)!

? 版權聲明
THE END
喜歡就支持一下吧
點贊14 分享