MYSQLmysql
1、引擎算法
mysql:MySQL是一個關係型數據庫管理系統,其中有兩種引擎最爲常見MyISAM和InnoDBsql
Question數據庫
這是由於聚簇索引採用的是平衡二叉樹算法,並且每一個節點都保存了該主鍵所對應行的數據,假設插入數據的主鍵是自增加的,那麼根據二叉樹算法會很快的把該數據添加到某個節點下,而其餘的節點不用動;可是若是插入的是不規則的數據,那麼每次插入都會改變二叉樹以前的數據狀態。從而致使了頁分裂。安全
聚簇索引的主鍵值,應儘可能是連續增加的值,而不是要是隨機值, (不要用隨機字符串或UUID),不然會形成大量的頁分裂與頁移動。在使用InnoDB的時候最好定義成:session
id int unsigned primary key auto_increment
由於索引雖然加快了查詢速度,但索引也是有代價的,另外,MySQL在運行時也要消耗資源維護索引,所以索引並非越多越好。
通常兩種狀況下不建議建索引。
1.表記錄比較少,超過2000條能夠酌情考慮索引。
2.索引的選擇性較低。所謂索引的選擇性(Selectivity),是指不重複的索引值(也叫基數,Cardinality)與表記錄數(#T)的比值:
Index Selectivity = Cardinality / #T性能
顯然選擇性的取值範圍爲(0, 1],選擇性越高的索引價值越大,這是由B+Tree的性質決定的。優化
使用索引掃描來優化排序條件
1.索引的列順序和Order by子句的順序徹底一致
2.索引中全部列的方向(升序,降序)和Order by子句徹底一致
3.Order by中的字段所有在關聯表中的第一張表中spa
不管作什麼都要確認版本號,不一樣的版本號下會有各類差別。線程
>Select version();
二、執行狀態分析
顯示哪些線程正在運行
>show processlist; (端口號給我馬賽克了,見諒見諒,安全起見)
精確兩位數,小數點。
show profile默認的是關閉的,可是會話級別能夠開啓這個功能,開啓它可讓MySQL收集在執行語句的時候所使用的資源。
分析SQL執行帶來的開銷是優化SQL的經常使用手段,在MySQL數據庫中,能夠經過配置profiling參數來啓用SQL剖析。
它只能在session級別來設置,設置後影響當前session;當它開啓後,後續執行的SQL語句都將記錄其資源開銷,諸如IO,上下文,CPU,MEMORY等。
開啓profiling,有個警告,這個參數在之後會被刪除,用information_scheam.PROFILING替代。
(設置profiling=1,開啓profile)
(使用命令:show profile 觀看執行時間,15行受影響)
根據query id查看某個查詢得詳細時間耗時。
如查詢語句:
查詢語句是explain select * from goods order by goods_id asc \G