mysql索引優化和TCP協議

2021-10-13 07:54:10 字數 1694 閱讀 1397

1、當使用索引列進行查詢的時候盡量不要使用表示式,把計算放再業務層而不是資料庫層。

2、盡量使用主鍵查詢,而不是其他索引,因此主鍵查詢不會觸發回表查詢。

3、使用字首索引。

4、使用索引掃瞄來排序。

5、union all,in,or 都能使用索引,但是推薦使用in。

6、範圍列可以用到索引。

6.1、範圍條件是:、>=、between

6.2、範圍列可以用到索引,但是範圍後面的列無法用到索引,索引最多用於乙個範圍列

7、強制型別轉換會全表掃瞄

8、更新十分頻繁,資料區分度不高的字段不宜建立索引

8.1、更新會變更b+樹,更新頻繁的字段建議索引會大大降低資料庫效能

8.2、類似於性別這類區分不大的屬性,建立索引是沒有意義的,不能有效的過濾資料

8.3、一般區分度在80%以上的時候就可以建立索引,區分度可以使用count(distinct(列名))/count(*)來計算

9、建立索引的列,不允許為null,可能會得到不符合預期的結果

10、當需要進行表連線的時候,最好不要超過三張表,因為需要join的字段,資料型別必須一致

11、能使用limit的時候盡量使用limit,大資料量不推薦,建議改為子查詢或union all

12、單錶索引建議控制在5個以內(現在沒有太多的限制)

13、單索引欄位不允許超過5個(組合索引)

14、建立索引的時候應該避免一下錯誤概念

14.1、索引越多越好

14.2、過早優化,在不了解系統的情況下進行優化

【索引監控】

show status like 'handler_read%';

引數解釋:

a、handler_read_first:讀取索引第乙個條目的次數

b、handler_read_key:通過索引獲取資料的次數

c、handler_read_last:讀取索引最後乙個條目的次數

d、handler_read_next:通過索引讀取下一條資料的次數

e、handler_read_prev:通過索引讀取上一條資料的次數

f、handler_read_rnd:從固定位置讀取資料的次數

g、handler_read_rnd_next:從資料節點讀取下一條資料的次數

【效能監控】

5.7後廢棄deprecated

查詢後整體顯示:show profiles;

查詢後分步顯示:show profile all for query 1;

開啟:set profiling=1;

執行計畫:explain

推薦performance schema

show processlist

show variables

【schema與資料型別優化】(高效能mysql)

tcp/ip協議:

應用層exec 8<> /dev/tcp/www.baidu.com/80

傳輸層netstat -anop

資料鏈路層

arp -a

tcpdump --n -i eth0 arp pr port 80

mysql 優化 聚集索引 mysql 索引優化

一.聚集索引 clustered index innodb預設依據主鍵列聚集,myisam不使用 特點 b樹每個葉子包含實際資料行,資料按照索引順序地儲存在物理頁上。優點 1.範圍查詢,獲取指定id的全部資料只需從磁碟讀取少量資料頁 如果不使用聚集索引,每條資料可能引起一次磁碟io。2.由於索引和資...

mysql索引優化原則 MySQL 索引優化原則

索引優化原則 1 最左字首匹配原則,聯合索引,mysql會從做向右匹配直到遇到範圍查詢 3 and d 4 如果建立 a,b,c,d 順序的索引,d是用不到索引的,如果建立 a,b,d,c 的索引則都可以用到,a,b,d的順序可以任意調整。2 和in可以亂序,比如a 1 and b 2 and c ...

mysql索引優化原則 MySQL索引優化

mysql官方對索引的定義 索引是幫助mysql高效獲取資料的資料結構。索引是在儲存引擎中實現的,所以每種儲存引擎中的索引都不一樣。如myisam和innodb儲存引擎只支援btree索引 memory和heap儲存引擎可以支援hash和btree索引。這裡僅針對常用的innodb儲存引擎所支援的b...