mysql 索引效果是否疊加_MySQL基礎實用知識集合(二)

60e405bda73ac1b45c48c60ffd25eaa0.png

上期小編給大家匯總介紹了mysql的6個基礎的知識點,下面繼續給大家分享一下另外7個知識點:

7、什么是死鎖?怎么解決?

死鎖:兩個或多個事務相互占用了對方的鎖,就會一直處于等待的狀態。

常見的解決死鎖的方法:
(1)、如果不同程序會并發存取多個表,盡量約定以相同的順序訪問表,可以大大降低死鎖機會。
(2)、在同一個事務中,盡可能做到一次鎖定所需要的所有資源,減少死鎖產生概率;
(3)、對于非常容易產生死鎖的業務部分,可以嘗試使用升級鎖定顆粒度,通過表級鎖定來減少死鎖產生的概率;
如果業務處理不好可以用分布式事務鎖或者使用樂觀鎖

8、多版本并發控制

MySQL的大多數事務型存儲引擎實現的都不是簡單的行級鎖。基于并發性能的考慮,他們一般都同時實現了多版本并發控制(MVCC),不僅MySQL,包括Oracale、PostgreSQL等其他數據庫都各自實現了MVCC,但基于實現的機制不盡相同,因為MVCC沒有一個統一的標準。InnoDB的MVCC,是通過在每行記錄后面保存兩個隱藏的列來實現的,一個是創建時間,一個是系統版本號。每開始一個新的事物,系統版本號會自動遞增。

9、char和varchar的區別?

varchar是變長,char是定長
varchar占用空間更多,會多出一個字節來儲存字符長度,超過255個字符使用兩個字節
char無碎片,varchar經常更新會造成碎片

10、MySQL性能優化

表結構優化:數據類型的選擇通常更小的最好,盡量避免NULL,表字段不宜太多,有時候反范式設計會帶來性能的提升。
經常查詢的列建立索引
索引列的基數越大,數據區分度越高,索引的效果越好。
對于字符串進行索引,應該制定一個前綴長度,可以節省大量的索引空間。
根據情況創建聯合索引,聯合索引可以提高查詢效率。
避免創建過多的索引,索引會額外占用磁盤空間,降低寫操作效率。
訪問數據太多導致查詢性能下降
確定應用程序是否在檢索大量超過需要的數據,可能是太多行或列
確認MySQL服務器是否在分析大量不必要的數據行
避免犯如下SQL語句錯誤
查詢不需要的數據。解決辦法:使用limit解決
多表關聯返回全部列。解決辦法:指定列名
總是返回全部列。解決辦法:避免使用SELECT *
重復查詢相同的數據。解決辦法:可以緩存數據,下次直接讀取緩存
是否在掃描額外的記錄。解決辦法:
使用explain進行分析,如果發現查詢需要掃描大量的數據,但只返回少數的行,可以通過如下技巧去優化:
使用索引覆蓋掃描,把所有的列都放到索引中,這樣存儲引擎不需要回表獲取對應行就可以返回結果。
改變數據庫和表的結構,修改數據表范式
重寫SQL語句,讓優化器可以以更優的方式執行查詢。
確定ON或者USING子句中是否有索引。
確保GROUP BY和ORDER BY只有一個表中的列,這樣MySQL才有可能使用索引。
LIMIT偏移量大的時候,查詢效率較低
可以記錄上次查詢的最大ID,下次查詢時直接根據該ID來查詢

11、IN和exists的使用?

exists對外表用loop逐條查詢,每次查詢都會查看exists的條件語句,當exists里的條件語句能夠返回紀錄行時
(無論記錄行是的多少,只要能返回),條件就為真,返回當前loop到的到這條紀錄,反之如果exists里的條 件語句不能返回記錄行,則當前loop到的這條記錄被丟棄,exists的條件就像一個bool條件,當能返回結果集則為true,不能返回結果集則為 false
in查詢相當于多個or條件的疊加,這個比較好理解,比如下面的查詢

select * from A where cc in (select cc from B),用到了A表上cc列的索引;
select * from A where exists(select cc from B where cc=http://A.cc) ,用到了B表上cc列的索引。

12、什么是交叉鏈接、內鏈接、外鏈接?

內連接(INNER JOIN):有兩種,顯式的和隱式的,返回連接表中符合連接條件和查詢條件的數據行。(所謂的連接表就是數據庫在做查詢形成的中間表)

外連接(OUTER JOIN):外連接分為左連接或左外連接、右連接或者右外連接、全連接或全外連接。我們簡單的就叫:左連接,右連接和全連接

左外連接:返回左表中的所有行,如果左表中行在右表中沒有匹配行,則結果中右表中的列返回空值
select t.teacher_name, s.student_name from teacher t, student s where t.id= s.teacher_id(+);
右外連接:恰與左連接相反,返回右表中的所有行,如果右表中行在左表中沒有匹配行,則結果中左表中的列返回空值
select t.teacher_name, s.student_name from teacher t, student s where t.id(+) = s.teacher_id;
全外連接:返回左表和右表中的所有行。當某行在另一表中沒有匹配行,則另一表中的列返回空值

交叉連接(CROSS JOIN):也稱笛卡兒積。
概念:不帶WHERE條件句,它將會返回被連接的兩個表的笛卡兒積,返回結果的行數等于兩個表行數的乘積

13、SQL語句關鍵字的執行順序

FROM:對FROM子句中的左表和又表執行笛卡爾積,產生虛擬表VT1。
ON:對虛擬表T1應用ON篩選,只有那些符合條件的行才被插入虛擬表VT2。
JOIN:如果指定了OUTER JOIN ,那么保留表中未匹配的行作為外部行添加到虛擬表VT2中,產生虛擬表VT3,。如果FROM子句包含兩個以上表,則對上一個連接生成的VT3和下一個表重復執行步驟1-步驟3,直到處理完表為止。
WHERE:對虛擬表VT3應用WHERE條件篩選,只有符合條件的行才被插入到虛擬表VT4中。
GROUP BY:根據GROUP BY子句中的列,對VT4中的記錄進行分組操作,產生虛擬表VT5。
CUBE|ROLLUP:對虛擬表VT5進行CUBE或ROLLUP操作,產生虛擬表VT6。
HAVING:對虛擬表VT6應用HAVING過濾器,只有符合條件的記錄才被插入虛擬表VT7。
SELECT:第二次執行SELECT操作,選擇指定的列,插入到虛擬表VT8中。
DISTINCT:去除重復的數據,產生虛擬表VT9。
ORDER BY:將虛擬表VT9中的記錄按照字段進行排序操作產生虛擬表VT10.
LIMIT:取出指定行的記錄,產生虛擬表VT11,并返回給查詢用戶。

睿江云官網鏈接:www.eflycloud.com

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/452958.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452958.shtml
英文地址,請注明出處:http://en.pswp.cn/news/452958.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

常用數據庫端口號總結

關系型數據庫: 1.Oracle數據庫默認端口號為,1521; 2.MySQL數據庫默認端口號為,3306; 3.SQLServer數據庫默認端口號為,1433; 4.postgreSQL數據庫默認端口號為,5432; NOSQL數據庫: …

【附源碼】為了幫助程序員談戀愛,我做了這個APP

前段時間,21歲的我第一次開啟了名為『戀愛』的副本,開始打名叫『女朋友』的BOSS,深感過程艱難,整個過程仿佛0級的菜雞進入了布滿世界迷霧的地圖,只能小心翼翼才能平安通過。然而在打怪升級的過程中,偶然看見…

IP協議

IP協議只負責傳送IP數據包,無法監視和控制網絡中出現的一些問題,這些工作由Internet的控制協議來完成IP是T C P / I P協議族中最為核心的協議。所有的T C P、U D P、I C M P及I G M P數據都以I P數據報格式傳輸。它的特點如下:不可靠(u n r e…

職場故事和感悟

1. 獵頭烏龍事件 05年11月的時候,我做了一個招聘主管的職位,一位朋友T推薦了她的好友L。從條件上看人很合適,聰明肯干,就是資力淺些,如果工作努力應該提高很快。我與其它兩個候選人一起推薦給了客戶。L與其它兩人一…

zbb20180415 cs 1.6 half-life launcher已停止工作

控制面板->系統->高級系統設置->高級->性能 設置->數據保護->為除下列選定程序之外的所有程序和服務啟用->添加-> 找到你的CS客戶端 選擇就好了-》應用 -》確定轉載于:https://www.cnblogs.com/super-admin/p/8849581.html

python形參中的:*args和**kwargs區別

詳細參考文章: https://blog.csdn.net/u014513323/article/details/89450573 感謝樓主分享

gitlab修改用戶密碼_CRM用戶模塊(用戶密碼修改)

四 密碼修改1 需求分析修改當前登陸用戶的登陸密碼2 頁面原型3 流程圖 4 編寫ControllerResponseBodyRequestMapping("updatePwd")public MessageModel updatePwd(HttpServletRequest request, String oldPassword, String newPassword, String confirmPassword){Mes…

ICMP協議簡介

ICMP是Internet Control Message Protocol,因特網控制報文協議。它是TCP/IP協議族的一個子協議,用于在IP主機、路由器之間傳遞控制消息。控制消息是指網絡通不通、主機是否可達、路由器是否可用等網絡本身的消息。這些控制消息雖然并不傳輸用戶數據&…

vue之vuex

vuex負責vue的數據管理和共享,適用于大型項目 安裝vuex npm install vuex --save; 運用vuex 主要有五大金剛: export default new Vuex.Store({//$store為了讓外部可以引用state,//數據存儲mutations,//行為動作actions,//異步改變state狀態,也就是提交m…

項目管理中的特殊———例外管理

概念 例外管理由管理學引入領導學,也就是指領導人應將主要精力和時間用來處理首次出現的、模糊隨機、十分重要需要立即處理的非程序化問題。而對于決策對象反復出現的,決策者已有固定的或例行的程序來處理的問題,即常例,由于在職業…

mysql 5.6.23 源碼包安裝報錯_CentOS6.5_64bit下編譯安裝MySQL-5.6.23

標簽:************************************************************CentOS6.5_64bit下編譯安裝MySQL-5.6.23**************************************************************一、關閉防火墻chkconfig iptables offservice iptables stop二、下載mysql源碼包&…

third day- 01--文件操作

1 1、請分別介紹文件操作中不同的打開方式之間的區別:2 3 模式 含義4 r 文本只讀模式5 rb 二進制模式  #這種方法,是用來傳輸或存儲,不給人看的。6 r r 是讀寫模式,只要沾上r,文件必須存在7 rb …

什么是TTL

TTL是指生存時間,簡單來說,它表示了數據包在網絡中的時間,經過一個路由器后TTL就減一,這樣TTL最終會減為0,當TTL為0時,則將數據包丟棄,這樣也就是因為兩個路由器之間可能形成環,如果…

python中itsdangerous模塊

使用itsdangerous生成臨時身份令牌 準備工作: 安裝pip install itsdangerous import itsdangeroussaltsdaf#加鹽,指定一個鹽值,別讓別人知道哦,否則就可以解密出來了 titsdangerous.TimedJSONWebSignatureSerializer(salt,expire…

微信小程序中form 表單提交和取值實例詳解

2019獨角獸企業重金招聘Python工程師標準>>> 我們知道&#xff0c;如果我們直接給 input 添加 bindinput&#xff0c;比如&#xff1a;<input bindinput"onUsernameInput" />&#xff0c;那么可以在 onUsernameInput 中直接使用 e.detail.value&…

matlab如何用代碼導入文件_20+行Matlab代碼實現文件掃描

最近剛好看到一篇回答&#xff0c;用閾值二值化處理圖片水印&#xff0c;受到啟發寫此代碼。閾值二值化適合處理只有黑白兩色的圖片&#xff0c;考慮到文件蓋章&#xff0c;這里作者使用像素顏色替換及灰度值處理圖片&#xff0c;進一步提高處理精度和能力。我們需要&#xff1…

聊聊Code Review

轉載&#xff1a;https://richardcao.me/2016/09/30/Talk-About-Codereview/ 最近思考一個問題&#xff0c;如何進行高效的codereview&#xff0c;有沒有好的工具可以使用&#xff0c;于是花了兩三天時間在Google里淘了一番&#xff0c;這里留下記錄。 Phabricator 首屈一指的c…

項目管理十大趨勢

趨勢一、更多中國企業成立項目管理辦公室&#xff0c;項目管理辦公室也發揮更大的作用 在國內&#xff0c;仍有很多企業每年有成百上千的項目實施&#xff0c;而公司卻沒有成立項目管理辦公室&#xff0c;或者已經有了PMO&#xff0c;但是PMO仍在履行一些較為基礎的職能。 沒…

啟動django服務器報錯raise errorclass(errno, errval) django.db.utils.InternalError

問題描述&#xff1a; 啟動django服務器python manage.py runserver報錯: raise errorclass(errno, errval) django.db.utils.InternalError: (1366, “Incorrect string value: ‘\xE7\x94\xA8\xE6\x88\xB7’ for column ‘name’ at row 1”) 原因&#xff1a;與mysql數據庫…

java單例模式之線程安全問題

單例的目的是為了保證運行時Singleton類只有唯一的一個實例&#xff0c;用于一些較大開銷的操作。 餓漢式&#xff08;沒有線程安全問題&#xff09;: ‘ 由于使用static關鍵字進行了修飾&#xff0c;只能獲取到一個對象&#xff0c;從而達到了單例&#xff0c;并且在Singleton…