AG积分

座機: 029-81773686 熱線: 18966895139
網頁制作、網絡營銷、維護推廣、手機網站制作一站式解決方案
十分感謝六年來與我們攜手共進的朋友們、客戶們!
這些Mysql問題你一定要知道(一)
添加時間:2020-04-24  點擊率:227次

1. 如何設計一個高并發的系統

① 數據庫的優化,包括合理的事務隔離級別、SQL語句優化、索引的優化

② 使用緩存,盡量減少數據庫 IO

③ 分布式數據庫、分布式緩存

④ 服務器的負載均衡


2. 鎖的優化策略

① 讀寫分離

② 分段加鎖

③ 減少鎖持有的時間

④ 多個線程盡量以相同的順序去獲取資源

等等,這些都不是絕對原則,都要根據情況,比如不能將鎖的粒度過于細化,不然可能會出現線程的加鎖和釋放次數過多,反而效率不如一次加一把大鎖。這部分跟面試官談了很久


3. 索引的底層實現原理和優化

B+樹,經過優化的B+樹

主要是在所有的葉子結點中增加了指向下一個葉子節點的指針,因此InnoDB建議為大部分表使用默認自增的主鍵作為主索引。


4. 什么情況下設置了索引但無法使用 

① 以“%”開頭的LIKE語句,模糊匹配

② OR語句前后沒有同時使用索引

③ 數據類型出現隱式轉化(如varchar不加單引號的話可能會自動轉換為int型)


5. SQL語句的優化 

order by要怎么處理

alter盡量將多次合并為一次

insert和delete也需要合并


6. 實踐中如何優化MySQL

我當時是按以下四條依次回答的,他們四條從效果上第一條影響最大,后面越來越小。

① SQL語句及索引的優化

② 數據庫表結構的優化

③ 系統配置的優化

④ 硬件的優化


8. sql注入的主要特點

變種極多,攻擊簡單,危害極大


9. sql注入的主要危害

未經授權操作數據庫的數據

惡意纂改網頁

私自添加系統賬號或者是數據庫使用者賬號

網頁掛木馬


10、優化數據庫的方法

· 選取最適用的字段屬性,盡可能減少定義字段寬度,盡量把字段設置NOTNULL,例如'省份'、'性別'最好適用ENUM

· 使用連接(JOIN)來代替子查詢

· 適用聯合(UNION)來代替手動創建的臨時表

· 事務處理

· 鎖定表、優化事務處理

· 適用外鍵,優化鎖定表

· 建立索引

· 優化查詢語句


11. 簡單描述mysql中,索引,主鍵,唯一索引,聯合索引的區別,對數據庫的性能有什么影響(從讀寫兩方面)

索引是一種特殊的文件(InnoDB數據表上的索引是表空間的一個組成部分),它們包含著對數據表里所有記錄的引用指針。

普通索引(由關鍵字KEY或INDEX定義的索引)的唯一任務是加快對數據的訪問速度。

普通索引允許被索引的數據列包含重復的值。如果能確定某個數據列將只包含彼此各不相同的值,在為這個數據列創建索引的時候就應該用關鍵字UNIQUE把它定義為一個唯一索引。也就是說,唯一索引可以保證數據記錄的唯一性。

主鍵,是一種特殊的唯一索引,在一張表中只能定義一個主鍵索引,主鍵用于唯一標識一條記錄,使用關鍵字 PRIMARY KEY 來創建。

索引可以覆蓋多個數據列,如像INDEX(columnA, columnB)索引,這就是聯合索引。

索引可以極大的提高數據的查詢速度,但是會降低插入、刪除、更新表的速度,因為在執行這些寫操作時,還要操作索引文件。


12.數據庫中的事務是什么?

事務(transaction)是作為一個單元的一組有序的數據庫操作。如果組中的所有操作都成功,則認為事務成功,即使只有一個操作失敗,事務也不成功。如果所有操作完成,事務則提交,其修改將作用于所有其他數據庫進程。如果一個操作失敗,則事務將回滾,該事務所有操作的影響都將取消。ACID 四大特性,原子性、隔離性、一致性、持久性。


13.了解XSS攻擊嗎?如何防止?

XSS是跨站腳本攻擊,首先是利用跨站腳本漏洞以一個特權模式去執行攻擊者構造的腳本,然后利用不安全的Activex控件執行惡意的行為。

使用htmlspecialchars()函數對提交的內容進行過濾,使字符串里面的特殊符號實體化。


14.SQL注入漏洞產生的原因?如何防止?

SQL注入產生的原因:程序開發過程中不注意規范書寫sql語句和對特殊字符進行過濾,導致客戶端可以通過全局變量POST和GET提交一些sql語句正常執行。

防止SQL注入的方式:

  • 開啟配置文件中的magic_quotes_gpc 和 magic_quotes_runtime設置

  • 執行sql語句時使用addslashes進行sql語句轉換

  • Sql語句書寫盡量不要省略雙引號和單引號。

  • 過濾掉sql語句中的一些關鍵詞:update、insert、delete、select、 * 。

  • 提高數據庫表和字段的命名技巧,對一些重要的字段根據程序的特點命名,取不易被猜到的。

  • Php配置文件中設置register_globals為off,關閉全局變量注冊

  • 控制錯誤信息,不要在瀏覽器上輸出錯誤信息,將錯誤信息寫到日志文件中。


15、 對于關系型數據庫而言,索引是相當重要的概念,請回答有關索引的幾個問題:

a)、索引的目的是什么?

  • 快速訪問數據表中的特定信息,提高檢索速度

  • 創建唯一性索引,保證數據庫表中每一行數據的唯一性。

  • 加速表和表之間的連接

  • 使用分組和排序子句進行數據檢索時,可以顯著減少查詢中分組和排序的時間


b)、索引對數據庫系統的負面影響是什么?

負面影響:

創建索引和維護索引需要耗費時間,這個時間隨著數據量的增加而增加;索引需要占用物理空間,不光是表需要占用數據空間,每個索引也需要占用物理空間;當對表進行增、刪、改、的時候索引也要動態維護,這樣就降低了數據的維護速度。


c)、為數據表建立索引的原則有哪些?

  • 在最頻繁使用的、用以縮小查詢范圍的字段上建立索引。

  • 在頻繁使用的、需要排序的字段上建立索引


d)、 什么情況下不宜建立索引?

  • 對于查詢中很少涉及的列或者重復值比較多的列,不宜建立索引。

  • 對于一些特殊的數據類型,不宜建立索引,比如文本字段(text)等

?
版權所有 ? AG积分宏博網絡,并保留所有權利
客服中心

AG积分


展開客服