本文目錄一覽:
- 1、為什麼MySQL字符串不加引號索引會失效?這個答案是我見過最靠譜
- 2、php程序員面試題,mysql怎麼防止注入
- 3、求《程序員面試金典中文第6版》全文免費下載百度網盤資源,謝謝~
- 4、程序員面試寶典之Mysql數據庫Innodb引擎的4個隔離級別
- 5、《程序員面試金典(第5版)》epub下載在線閱讀,求百度網盤雲資源
- 6、《程序員面試金典中文第6版》pdf下載在線閱讀全文,求百度網盤雲資源
為什麼MySQL字符串不加引號索引會失效?這個答案是我見過最靠譜
作為一名程序員,在求職面試時,不知你有沒有遇到類似這樣的問題。
張工是一名java程序員,最近到一家軟件公司應聘軟件開發崗位,面試官問了他關於MySql索引這樣的一個問題。
對於這個問題張工之前在做項目時也曾遇到,那時候字段明明是加了索引,可不明白為什麼還是很慢。後加上引號就正常了,為了趕項目進度,張工也沒有再去留意。
現在面試官突然這麼一問,張工也說不出個所以然來。
面試官讓他回去等通知。
我們知道MySql索引可以加快數據檢索速度,這也是使用的索引的最主要原因。但有時候使用不當就會遇到索引失效問題,譬如在MySQL字符串類型查詢時不加引號索引會失效,是因為MySQL內部進行了隱式轉換。
那為什麼會發生隱式轉換?又是怎麼轉換的呢?
今天我們來聊聊關於MySql索引失效的話題。
先來看看一般導致索引失效的有哪些?
如果一張表的索引有多個,要遵守最佳左前綴法則,即查詢從索引的最左前列開始並且不跳過索引中的列。
用戶表tb_user字段 id,name,age,sex
創建索引為idx_user_name
執行語句:
這時候就會導致索引失效
在索引列上做加工操作,查詢時會導致索引失效,從而導致全表掃描。所以,建議不要在索引列上做任何操作。
舉個例子,例如訂單表tb_order有個索引是dt(日期), 字段數據存放的格式是這樣的2021-12-10 這樣的,如果有個需求需要根據dt,格式是20220207這樣的來查詢,這時候就不要對dt進行格式轉換了,
這樣索引就失效了。
而是應該對 20220207做格式處理
這樣dt索引才不會失效。
例如我們在訂單表tb_order建立了索引idx_order_id,order_id字段類型為varchar
在查詢時如果使用where order_id= 20220207123654100,這樣的查詢方式會直接造成索引失效。
要讓索引生效,正確的用法為
假如有張用戶表tb_user,創建的索引為idx_user_name_age_sex_phone 其中name、age、sex都加了索引。
執行語句
上面這條sql語句只會命中name和age索引,sex索引會失效,複合索引失效需要查看key_len的長度。
再來看一個例子:
從這兩條SQL執行的結果我們可以看出,執行第一條SQL沒有使用到索引,而執行第二條SQL時使用到了索引。這是為什麼呢?
我們需要先了解下mysql索引優化器工作的原理。選擇索引是優化器工作,優化器工作有自己的一套規則,如果等號兩邊的數據類型不一致,則會發生隱式轉換。
基於這條規則,我們回過頭看看
這條SQL語句執行時就會變為
由於對索引列進行了函數操作,所以才導致索引失效,從而全表掃描了。
那麼問題來了,細心的你不知有沒有留意到為什麼是把左側的列轉為int類型,而不是把右側的值轉成字符串類型呢?
什麼情況下把數字轉為字符串,什麼情況下把字符串轉為數字,優化器它是根據什麼規則來進行判斷的?其實規則也並不複雜。
根據這個規則,我們再回過頭看看之前的查詢語句
select ‘12345678936’ = 12345678936
返回1 所以這時候就把左側的列值12345678936轉成數字。
關於MySql索引失效的問題先簡單寫到這,建議平時在做項目時還是要多了解下原理,如果你了解其背後的原理,求職面試時和面試官交流起來就會很舒服了,相信能為這次面試加分,提高被錄用的概率。
為什麼MySQL字符串類型查詢時不加引號索引會失效?這是因為要查詢的字符串字段沒有加引號時,MySQL內部進行了隱式轉換,此次查詢會導致全表掃描,所以慢了。
總結:
在索引列上進行了函數操作,MySQL內部會進行了隱式轉換,導致索引失效,從而產生全表掃描。
由於筆者知識及水平有限,文中錯漏之處在所難免,如有不足之處,歡迎交流。
拓展
索引創建
1、主鍵索引:
2、唯一索引:
3、普通索引:
4、全文索引:
alter table table_name add fulltext (column)
5、聯合索引:
索引刪除
php程序員面試題,mysql怎麼防止注入
php程序員面試題,mysql怎麼防止注入
引發
SQL
注入攻擊的主要原因,是因為以下兩點原因:
1. php 配置文件 php.ini 中的 magic_quotes_gpc選項沒有打開,被置為 off
2. 開發者沒有對數據類型進行檢查和轉義
求《程序員面試金典中文第6版》全文免費下載百度網盤資源,謝謝~
《程序員面試金典中文第6版》百度網盤pdf最新全集下載:
鏈接:
?pwd=wwvc 提取碼: wwvc
簡介:本書是原谷歌面試官的經驗之作,層層緊扣程序員面試的每一個環節,全面而詳盡地介紹了程序員應當如何應對面試,才能在面試中脫穎而出。內容主要涉及面試流程解析,面試官的幕後決策及可能提出的問題,面試前的準備工作,對面試結果的處理,以及出自微軟、蘋果、谷歌等多家知名公司的189道編程面試題及詳細解決方案。第6版修訂了上一版中一些題目的解法,為各章新增了介紹性內容,加入了更多的算法策略,並增添了對所有題目的提示信息。
程序員面試寶典之Mysql數據庫Innodb引擎的4個隔離級別
題目:請闡述Mysql Innodb引擎的4個隔離級別
難度:三星
面試頻率:五星
這道題真的是一道數據庫的高頻題,數據庫題除了索引的原理之外就是這道題的面試頻率最高。
1.Read uncommitted(讀未提交):,最低的隔離級別,可以一個事務讀到其他事務沒有提交的數據,也稱臟讀,這個隔離級別很少人用
2.Read committed(讀已提交):相比於讀未提交,這個隔離級別只能讀到其他事物已經提交了的數據,這個隔離級別用得比較多。但是不是Mysql默認的隔離級別
3.Repeatable read(可重複讀): 在讀已提交隔離級別中,2次讀取同一個變量如果其他事務修改了它的值,會讀到的不一樣。而在這個隔離級別中,顧名思義,一個事務開始讀了。多次讀到的值可以保證是一樣的
4.Serializable 序列化 在這個隔離級別下,所有的事務都將串行操作,是隔離級別最高的也是效率最低的,很少人用
面試官追問:Innodb引擎默認隔離級別是哪個
答:可重複讀
面試官追問:可重複讀的實現原理
答:使用了MVCC多版本控制(類似樂觀鎖),Innodb引擎會給每一行數據加一個版本號信息,當一個事務修改一個數據時會增加它的版本號+1,當一個事務開始的時候會緩存下此時的版本號,後面讀取的時候只會讀取這個版本號的數據,因此別的事務提交了修改數據的版本號大於它,因此不會被讀到
面試官追問:事務的隔離級別如何設置:
答:在Mysql命令行下調用命令 set global.tx_isolation,但這樣Mysql重啟失效,修改my.cnf來永久設置
面試官追問:可重讀讀有什麼問題
答:會出現幻讀,幻讀是指事務讀取到一個值無法準確繼續後續操作。例如讀取一個值,沒有則插入,但是等插入的時候其他事務已經插入了,這就會導致插入失敗,解決辦法:sql語句顯示加鎖 :select xxxx for update,其他事務修改數據則會阻塞
《程序員面試金典(第5版)》epub下載在線閱讀,求百度網盤雲資源
《程序員面試金典(第5版)》([美] Gayle Laakmann McDowell)電子書網盤下載免費在線閱讀
資源鏈接:
鏈接:
提取碼:79f5
書名:程序員面試金典(第5版)
作者:[美] Gayle Laakmann McDowell
譯者:李琳驍
豆瓣評分:8.9
出版社:人民郵電出版社
出版年份:2013-11
頁數:372
內容簡介:
本書是原谷歌資深面試官的經驗之作,層層緊扣程序員面試的每一個環節,全面而詳盡地介紹了程序員應當如何應對面試,才能在面試中脫穎而出。第1~7 章主要涉及面試流程解析、面試官的幕後決策及可能提出的問題、面試前的準備工作、對面試結果的處理等內容;第8~9 章從數據結構、概念與算法、知識類問題和附加面試題4 個方面,為讀者呈現了出自微軟、蘋果、谷歌等多家知名公司的150 道編程面試題,並針對每一道面試題目,分別給出了詳細的解決方案。
本書適合程序開發和設計人員閱讀。
作者簡介:
作者簡介:
Gayle Laakmann McDwell
美國求職諮詢網站CareerCup.cm創始人兼CE,是一位著名軟件工程師,曾在微軟、蘋果與谷歌任職。早先,她自己就是一位十分成功的求職者,成功通過了微軟、谷歌、亞馬遜、蘋果、IBM、高盛等多家最著名企業極其嚴苛的面試過程。工作以後,她又成為一位出色的面試官。在谷歌任職期間,她還是該公司資深面試官及招聘委員會成員,期間閱人無數,積累了相當豐富的面試經驗。除此書外,還著有《金領簡歷:敲開蘋果、微軟、谷歌的大門》。
譯者簡介:
李琳驍
從事嵌入式Linux內核/驅動開發,關注IT、開放源碼和安防監控等領域。業餘時以技術翻譯為樂,時而客串編輯,好為愛書挑錯,渴求完美,卻也常因“小”失大,不得讀書要領。翻譯或參與翻譯了《Linux命令詳解手冊》《編程人生》《編程大師訪談錄》等圖書。網絡ID為leal,管理Vim、Andrid等豆瓣小組,個人站點:。
漆犇
畢業於中國地質大學,擁有十餘年軟件開發、測試及流程管理經驗,曾翻譯出版了《Linux/Unix設計思想》《金領簡歷 : 敲開蘋果、微軟、谷歌的大門》等書。目前定居於美國西雅圖,在微軟Windws Phne開發中心從事與WP應用開發者相關的項目管理事務。
《程序員面試金典中文第6版》pdf下載在線閱讀全文,求百度網盤雲資源
《程序員面試金典中文第6版》百度網盤pdf最新全集下載:
鏈接:
?pwd=wwvc 提取碼: wwvc
簡介:本書是原谷歌面試官的經驗之作,層層緊扣程序員面試的每一個環節,全面而詳盡地介紹了程序員應當如何應對面試,才能在面試中脫穎而出。內容主要涉及面試流程解析,面試官的幕後決策及可能提出的問題,面試前的準備工作,對面試結果的處理,以及出自微軟、蘋果、谷歌等多家知名公司的189道編程面試題及詳細解決方案。第6版修訂了上一版中一些題目的解法,為各章新增了介紹性內容,加入了更多的算法策略,並增添了對所有題目的提示信息。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/246987.html