摘要:自己整理了一篇什么是數據庫三級封鎖協議的文章,關注公眾號琉憶編程庫,回復鎖,我發給你。以下內容部分來自程序員面試筆試寶典和程序員面試筆試真題解析如需轉載請注明出處。
你好,是我琉憶,PHP程序員面試筆試系列圖書的作者。
本周(2019.3.4至3.8)的一三五更新的文章如下:
周一:PHP面試MySQL數據庫的基礎知識
周三:PHP面試MySQL數據庫的索引
周五:PHP面試MySQL數據庫的面試真題
今天周五,提前祝各位周末愉快。
自己整理了一篇“什么是數據庫三級封鎖協議?”的文章,關注公眾號:“琉憶編程庫”,回復:“鎖”,我發給你。
以下內容部分來自《PHP程序員面試筆試寶典》和《PHP程序員面試筆試真題解析》如需轉載請注明出處。
BEGIN TRANSACTION DELETE FROM MYTABLE WHERE ID=1 DELETE FROM OTHERTABLE ROLLBACK TRANSACTION
A.OTHERTABLE 中的內容將被刪除
B.OTHERTABLE 和 MYTABLE 中的內容都會被刪除
C.OTHERTABLE 中的內容將被刪除,MYTABLE 中 ID 是 1 的內容將被刪除
D.數據庫沒有變化
參考答案:D。
分析:這個查詢是一個事務,并且這個事務的最后有回滾,數據庫不會有變化。
數據庫優化的過程可以使用以下的方法進行:
1)選取最適用的字段屬性,盡可能減少定義字段長度,盡量把字段設置NOT NULL,例如"省份、性別",最好設置為ENUM。
2)使用連接(JOIN)來代替子查詢。
① 刪除沒有任何訂單客戶:DELETE FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo)。
② 提取所有沒有訂單客戶:
SELECT FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo)。
③ 提高b的速度優化:SELECT FROM customerinfo LEFT JOIN orderid customerinfo. customerid=orderinfo.customerid WHERE orderinfo.customerid IS NULL。
3)使用聯合(UNION)來代替手動創建的臨時表。創建臨時表:SELECT name FROM "nametest" UNION SELECT username FROM "nametest2"。
4)事務處理。保證數據完整性,例如添加和修改。同時,如果兩者成立,則都執行,一者失敗都失敗:
mysql_query("BEGIN"); mysql_query("INSERT INTO customerinfo (name) VALUES ("$name1")"; mysql_query("SELECT * FROM "orderinfo" where customerid=".$id"); mysql_query("COMMIT");
5)鎖定表,優化事務處理。用一個SELECT語句取出初始數據,通過一些計算,用UPDATE語句將新值更新到表中。包含有WRITE關鍵字的LOCK TABLE語句可以保證在UNLOCK TABLES命令被執行之前,不會有其他的訪問來對customerinfo表進行插入、更新或者刪除的操作。
mysql_query("LOCK TABLE customerinfo READ, orderinfo WRITE"); mysql_query("SELECT customerid FROM "customerinfo" where id=".$id); mysql_query("UPDATE "orderinfo" SET ordertitle="$title" where customerid=".$id); mysql_query("UNLOCK TABLES");
6)使用外鍵,優化鎖定表。把customerinfo里的customerid映射到orderinfo里的customerid,任何一條沒有合法的customerid的記錄不會寫到orderinfo里。
CREATE TABLE customerinfo ( customerid INT NOT NULL, PRIMARY KEY(customerid) )TYPE = INNODB; CREATE TABLE orderinfo ( orderid INT NOT NULL, customerid INT NOT NULL, PRIMARY KEY(customerid,orderid), FOREIGN KEY (customerid) REFERENCES customerinfo (customerid) ON DELETE CASCADE )TYPE = INNODB;
注意:"ON DELETE CASCADE",該參數保證當customerinfo表中的一條記錄刪除的話同時也會刪除order。
表中的該用戶的所有記錄,注意使用外鍵時要定義數據庫引擎為INNODB。
在MySQL中有兩個存儲引擎:MyISAM和InnoDB,每個引擎都有利有弊。
MyISAM適合于一些需要大量查詢的應用,但其對于有大量寫操作的支持并不是很好。甚至只是需要update一個字段,整個表都會被鎖起來,而其他進程,就算是讀進程都無法操作直到讀操作完成。另外,MyISAM 對于 SELECT COUNT(*) 這類的計算是超快無比的。
InnoDB 的趨勢會是一個非常復雜的存儲引擎,對于一些小的應用,它會比 MyISAM 還慢。但是它支持“行鎖”,于是在寫操作比較多的時候,會更優秀。并且,它還支持更多的高級應用,例如事務。
參考答案:檢查PHP腳本的執行效率的方法如下:可以在檢查的代碼開頭記錄一個時間,然后在代碼的結尾也記錄一個時間,結尾時間減去開頭時間取這個時間的差值,從而檢查PHP的腳本執行效率,記錄時間可以使用microtime()函數。
檢查數據庫SQL的效率的方法如下:可以通過explain顯示MySQL如何使用索引來處理select語句及連接表,幫助選擇更好的索引和寫出更優化的查詢語句。然后啟用slow query log記錄慢查詢,通過查看SQL的執行時間和效率來定位分析腳本執行的問題和瓶頸所在。
自己整理了一篇“什么是數據庫三級封鎖協議?”的文章,關注公眾號:“琉憶編程庫”,回復:“鎖”,我發給你。
A.使用索引能加快插入數據的速度
B.良好的索引策略有助于防止跨站攻擊
C.應當根據數據庫的實際應用合理設計索引
D.刪除一條記錄將導致整個表的索引被破壞
參考答案:C。
分析:索引的作用主要是幫助數據庫快速查找到對應的數據,并不能加快插入數據的速度,所以,選項A錯誤。
索引不能夠幫助防止跨站攻擊,所以,選項B錯誤。
創建合理的索引需要分析數據庫的實際用途并找出它的弱點。優化腳本中的冗余查詢同樣也能提高數據庫效率。索引是占用物理空間的,所以在實際的應用中是要合理設計使用索引的。所以,選項C正確。
索引是一種表結構,刪除一條數據也不會影響到整個表的索引,并且索引不一定是數字,也可以是字符串。所以,選項D錯誤。
A.Sphinx是一個基于SQL的全文檢索引擎,可以結合MySQL做全文搜索,它可以提供比數據庫本身更專業的搜索功能
B.Solr是新一代的全文檢索組件,它比Lucene的搜索效率高很多,還能支持HTTP的訪問方式,PHP調用Solr也很方便
C.MySQL中把一個字段建立FULLTEXT索引,就可以實現全文檢索,目前MyISAM和InnoDB的table都支持FULLTEXT索引
D.Lucene附帶的二元分詞分析器CJKAnalyzer切詞速度很快,能滿足一般的全文檢索需要
參考答案:B。
分析:Sphinx是一個基于SQL的全文檢索引擎,可以結合MySQL、PostgreSQL做全文搜索,它可以提供比數據庫本身更專業的搜索功能,使得應用程序更容易實現專業化的全文檢索。
Solr是一個獨立的企業級搜索應用服務器,用戶可以通過HTTP請求訪問,它是采用JAVA5開發,基于Lucene的全文搜索服務器,同時對其進行了擴展,提供了比Lucene更為豐富的查詢語言,同時實現了可配置、可擴展并對查詢性能進行了優化,并且提供了一個完善的功能管理界面,是一款非常優秀的全文搜索引擎。并且Solr比Lucene的搜索效率高很多,但是PHP調用Solr并不方便,選項B的說法錯誤。
MySQL中的MyISAM和InnoDB都是支持FULLTEXT全文索引的。全文搜索引擎可以在不使用模板匹配操作的情況下查找單詞或短語。
SELECT * FROM MY_TABLE
A.如果可能,那么把查詢轉換成存儲例程
B.如果程序允許,那么給查詢指定返回記錄的范圍
C.如果可能,那么添加 where 條件
D.如果DBMS允許,那么把查詢轉換成視圖
參考答案:B、C。
分析:有兩個方法能限制返回記錄的條數——使用 where 條件或limit關鍵字指定查詢返回的記錄的范圍。
通常情況下,如果沒有特殊需要,那么盡量不要用 select *,這會浪費大量的數據緩存。
以上內容摘自《PHP程序員面試筆試寶典》和《PHP程序員面試筆試真題解析》書籍,目前本書沒有電子版,可到各大電商平臺購買紙質版。
更多PHP相關的面試知識、考題可以關注公眾號獲取:琉憶編程庫
對本文有什么問題或建議都可以進行留言,我將不斷完善追求極致,感謝你們的支持。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30955.html
摘要:正確做法是給加索引,還有聯合索引,并不能避免全表掃描。 前言:有收獲的話請加顆小星星,沒有收獲的話可以 反對 沒有幫助 舉報三連 有心的同學應該會看到我這個noteBook下面的其它知識,希望對你們有些許幫助。 本文地址 時間點:2017-11 一個16年畢業生所經歷的php面試 一、什么是面試 二、面試準備 1. 問:什么時候開始準備? 2. 問:怎么準備? 三、面試...
摘要:前端篇收集的前端面試題和答案前端開發面試題史上最全的前端面試題匯總及答案前端工程師手冊協議工作原理協議運行機制的概述協議篇原理原理解析的工作原理與的區別理解后端篇年的面試總結垃圾回收機制面向對象設計淺談說清楚是什么和的區別索引原理及慢查 前端篇 收集的前端面試題和答案 前端開發面試題 史上最全的web前端面試題匯總及答案 前端工程師手冊 HTTP協議:工作原理 SSL/TLS協議運行...
摘要:雖然有了十全的計劃,但如何高效率去記住上面那么多東西是一個大問題,看看我是怎么做的。 前言 前一篇文章講述了我在三月份毫無準備就去面試的后果,一開始心態真的爆炸,但是又不服氣,一想到每次回來后家人朋友問我面試結果的期待臉,越覺得必須付出的行動來證明自己了。 面經傳送門:一個1年工作經驗的PHP程序員是如何被面試官虐的? 下面是我花費兩個星期做的準備,主要分三部分: 有計劃——計劃好...
閱讀 898·2021-10-25 09:44
閱讀 1269·2021-09-23 11:56
閱讀 1192·2021-09-10 10:50
閱讀 3136·2019-08-30 15:53
閱讀 2140·2019-08-30 13:17
閱讀 621·2019-08-29 18:43
閱讀 2498·2019-08-29 12:57
閱讀 860·2019-08-26 12:20