[精選]Mysql優(yōu)化查詢過程中的數(shù)據(jù)訪問
3.EXT3,EXT4,XFS文件系統(tǒng)大???
| Linux | 文件系統(tǒng)大小 | 單個文件大小 |
|---|---|---|
| ext3 | 16TB | 2TB |
| ext4 | 1EB | 16TB |
| xfs | 18EB | 9EB |
4.Linux 系統(tǒng)文件描述符:
5.Mysql日志
有多少種日志 :redo/undo
日志的存放形式 redo:在頁修改的時候,先寫到redo log buffer 里面,然后寫到redo log 的文件系統(tǒng)緩存里面(fwrite),然后再同步到磁盤文件(fsync)。
Undo:在MySQL5.5之前,undo只能存放在ibdata*文件里面,5.6之后,可以通過設置innodb\_undo\_tablespaces參數(shù)把undo log存放在ibdata*之外。
6. Mysql json類型
5.7.8開始,mysql開始支持json數(shù)據(jù)類型,json數(shù)據(jù)類型存儲時會做格式檢驗,不滿足json格式會報錯,json數(shù)據(jù)類型默認值不允許為空。
優(yōu)勢:
存儲上類似text,可以存非常大的數(shù)據(jù)。
JSON有效性檢查:插入的數(shù)據(jù)必須是JSON類型的字符串才行。
相比于傳統(tǒng)形式,不需要遍歷所有字符串才能找到數(shù)據(jù)。
支持索引:通過虛擬列的功能可以對JSON中部分的數(shù)據(jù)進行索引
7. Mysql索引創(chuàng)建原則
8. 索引的注意事項
復合索引遵循左前綴原則
like 查詢,%不能在前,可以使用全文索引
column is null 可以使用索引
如果 MySQL 估計使用索引比全表掃描更慢,會放棄使用索引
9.查詢速度慢的原因
打開慢查詢?nèi)罩荆ㄟ^ pt-query-dugest 分析
#看一下當前mysql數(shù)據(jù)庫是否開啟了慢查詢
show variables like 'slow_query%';
#臨時開啟
set global slow_query_log='ON';
#永久開啟:修改配置文件my.cnf,在[mysqld]下的下方加入,重啟mysql服務
[mysqld]
slow_query_log = ON
slow_query_log_file = /var/lib/mysql/tmp_slow.log //linux
long_query_time = 1show profile,通過 set profiling=1;開啟,服務器上執(zhí)行的所有語句消耗時間都會記錄到臨時表。show profile for query QUERY_ID 查詢指定查詢 show status,查詢一些計數(shù)器,猜出哪些代價高或消耗時間多 show processlist,查詢線程狀態(tài)進行分析 explain,分析單個 SQL 語句查詢
10.Mysql優(yōu)化查詢過程中的數(shù)據(jù)訪問
11.優(yōu)化長難的查詢語句
MySQL 內(nèi)部每秒能掃描內(nèi)存中上百萬行數(shù)據(jù),相比之下,響應數(shù)據(jù)給客戶端就要慢得多
將一個大的查詢分解為多個小的查詢
分解關聯(lián)查詢,將一個關聯(lián)查詢分解為多個 sql 來執(zhí)行,讓緩存效率更高,執(zhí)行單個查詢可以減少鎖的競爭,在應用層做關聯(lián)可以更容易對數(shù)據(jù)庫進行拆分,查詢效率會有大幅提升,較少冗余記錄的查詢
12 .優(yōu)化特定類型的查詢語句
優(yōu)化 count()查詢,count(*)會忽略所有列,直接統(tǒng)計所有列數(shù),因此不要用 count(列名)
優(yōu)化關聯(lián)查詢,確定 ON 或者 USING 子句的列上有索引;確保 GROUP BY 和 ORDER BY 中只有一個表的列,這樣 MySQL 才有可能使用索引
優(yōu)化子查詢,可使用關聯(lián)查詢替代
優(yōu)化 GROUP BY 和 DISTINCT,建立索引進行優(yōu)化
優(yōu)化 LIMIT 分頁,可以通過記錄上次查詢的最大 ID,如果根據(jù) id 排序時,下次查詢根據(jù)該 ID 來查 詢(如:ID > maxID)
優(yōu)化 UNION 查詢,UNION ALL 性能比 UNION 高
13.高并發(fā)常見單位
QPS:每秒鐘請求或查詢數(shù)量,在互聯(lián)網(wǎng)領域指每秒響應的請求數(shù)(指 HTTP 請求)
PV:綜合瀏覽量(Page View),即頁面瀏覽量或者點擊量,一個訪客在 24 小時內(nèi)訪問的頁面數(shù)量。同一個人瀏覽你的網(wǎng)站同一個頁面,只記作一次 PV
UV:獨立訪客(UniQue Visitor),即一定時間范圍內(nèi)相同訪客多次訪問網(wǎng)站,只能計算為 1 個獨立訪客
QPS 不等于并發(fā)并發(fā)連接數(shù)。QPS 是每秒 HTTP 請求數(shù)量,并發(fā)連接數(shù)是系統(tǒng)同時處理的請求數(shù)量
二八定律(80%的訪問量集中在 20%的時間):(總 PV 數(shù) 80%)/(6 小時秒速 20%)=峰值每秒請求數(shù)(QPS)
14.常用性能測試工具 ab
# 模擬并發(fā)請求 100 次,總請求 5000 次
ab -c 100 -n 5000 http://example.com
200 請求成功2. 204 not content
206 reset content
301 永久重定向
302 臨時重定向
307 臨時重定向
400 錯誤請求
401 缺少認證信息
403 拒絕
404 不存在
500 服務器異常
502 Bad Gateway
503 服務器超負載或停機維護
16.OSI 七層協(xié)議
傳輸層:定義傳輸數(shù)據(jù)的協(xié)議端口號,一級流控和差錯校驗。協(xié)議有 TCP/UDP,數(shù)據(jù)包一旦離開網(wǎng)卡即進入網(wǎng)絡傳輸層
【面試】50道經(jīng)典計算機網(wǎng)絡面試題 面試中常見的計算機網(wǎng)絡的問題
17. HTTP 協(xié)議常見請求頭/響應頭
Content-Type 指定數(shù)據(jù)內(nèi)容類型
Accept 指定客戶端能接受數(shù)據(jù)內(nèi)容類型
Origin 最初請求來源(POST)
Cookie
Cache-Control 指定請求的緩存機制
User-Agent 用戶瀏覽器信息
Referrer 上級請求路徑
X-Forwarded-For 請求端真實 ip
Access-Control-Allow-Origin 允許其他請求域名,用于跨域
Last-Modified 最后響應時間
18.算法,邏輯結(jié)構,存儲結(jié)構的關系
一個算法的設計取決于所選定的邏輯結(jié)構,而算法的實現(xiàn)依賴于所采用的存儲結(jié)構。
順序存儲結(jié)構:用數(shù)據(jù)元素在存儲器中的相對位置來表示數(shù)據(jù)元素之間的邏輯結(jié)構(關系)。
鏈式存儲結(jié)構:在每一個數(shù)據(jù)元素中增加一個存放另一個元素地址的指針(pointer ),用該指針來表示數(shù)據(jù)元素之間的邏輯結(jié)構(關系)
19.PHP偽類型
偽類型:假類型,實際上在PHP中不存在的類型。但是通過偽類型可以幫助程序員去更好的查看操作手冊從而更方便學習。
mixed混合類型:多種PHP中的數(shù)據(jù)類型
number數(shù)字類型:任意數(shù)值類型(整形和浮點型)
callback回調(diào)類型:回調(diào)函數(shù)作為參數(shù)
20.PHP-FPM的運行方式及優(yōu)缺點?
static :表示在 php-fpm 運行時直接 fork 出 pm.max_chindren 個子進程,
dynamic:表示,運行時 fork 出 start_servers 個進程,隨著負載的情況,動態(tài)的調(diào)整,最多不超過 max_children 個進程。
21.PHP常用信息函數(shù)
phpinfo — 輸出關于 PHP 配置的信息
phpversion — 獲取當前的PHP版本
php_sapi_name — 返回 web 服務器和 PHP 之間的接口類型
ini_get — 獲取一個配置選項的值
ini_get_all — 獲取所有配置選項
ini_restore — 恢復配置選項的值
ini_set — 為一個配置選項設置值
服務端過程:先初始化 Socket,建立流式套接字,與本機地址及端口進行綁定,然后通知 TCP,準備好接收連接,調(diào)用 accept() 阻塞,等待來自客戶端的連接。如果這時客戶端與服務器建立了連接,客戶端發(fā)送數(shù)據(jù)請求,服務器接收請求并處理請求,然后把響應數(shù)據(jù)發(fā)送給客戶端,客戶端讀取數(shù)據(jù),直到數(shù)據(jù)交換完畢。最后關閉連接,交互結(jié)束。詳述WebSocket原理 視頻 | 一步步教你操作websocket通知案例
23.PHP數(shù)組結(jié)構及排序原理
申請n個額外空間
遍歷雙鏈表 調(diào)用排序函數(shù)zend\_qsort(內(nèi)部是快速排序算法)對數(shù)組排序
調(diào)用排序函數(shù)zend\_qsort(內(nèi)部是快速排序算法)對數(shù)組排序
排序后,雙鏈表中節(jié)點的位置發(fā)生變化,因而調(diào)整指定指向
遍歷數(shù)組,分別設置每一個節(jié)點的pListLast和pListNext
設置HashTable的pListTail
