mysql索引優化和TCP協議

PawnshopArthur發表於2020-12-31

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)

用整形儲存ip地址:select inet_aton('192.168.1.1')

null!=null

 

TCP/IP協議:

應用層

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

echo -e "GET / HTTP/1.0\n" >& 8

cat <& 8

傳輸層

netstat -anop

資料鏈路層

arp -a

 

tcpdump --n -i eth0 arp pr port 80

 

相關文章