1.索引是什麼?
索引是一種資料結構,類似書的目錄,能幫助快速找到資料。
2.索引是個什麼樣的資料結構?
INNODB引擎下,索引的資料結構是B+Tree和Hash索引
3.Hash索引和B+Tree有所區別和劣勢?
1.hash索引只適用於等值查詢,不支援範圍查詢
2.hash索引有可能出現多個key重複,這種情況查詢效率低
3.hash索引不支援排序
4.hash索引不支援模糊查詢
5.hash索引任何時候都需要回表。
4,什麼是聚簇索引和覆蓋索引?
聚簇索引:在innodb引擎中,就明顯的聚簇索引就是主鍵索引,如果沒有主鍵索引,就採用唯一索引,如果也沒有,就使用一個隱式的生成欄位
覆蓋索引:就是指在查詢中,在葉子節點的key中,就包含了所要查詢的資料,不需要進行回表的操作
5,建立索引時要考慮那些因素?
1.需要考慮索引的先後順序
2.考慮欄位的使用頻率,當資料比較平均的時候,索引的效果比較差
3.單表的索引要合適,索引不能過多
6,聯合索引是什麼?為啥還需要考慮順序?
聯合索引就是由多個欄位組合而成的索引
考慮順序是因為索引的最左原則,需要按照建立索引時的欄位順序挨個使用,否則無法命中索引。
7,建立的索引有沒有被使用到?或者說怎麼才可以知道這條語句執行很慢的原因?
在查詢的sql前面新增explain,得到sql語句的分析,可以通過possible_key ,key,extra來判斷
8,哪些情況下會出現索引失效?
1. 使用不等於查詢 !=,<>
2. 在欄位上進行函式,運算
3. 搜尋的內容 ‘%1111‘,算做範圍查詢
4. 不符合聯合索引的最左原則
9,事務是什麼?
事務就是一串sql語句,要麼全成功,要麼全失敗。
10,ACID是什麼?簡要說明一下
事務的4個特徵:隔離性,一致性,永續性,原子性
11,同時有多個事務在進行會咋樣?
1. 髒讀:髒讀是在未提交讀隔離級別下,當一個事務正在訪問資料,並且進行了修改,但該事務的修改還沒提交,這時另外一個事務也訪問這個資料,然後使用這個資料
2. 不可重複讀:(已提交讀)在一個事務中,多次讀同一資料,在這個事務執行期間,另外一個事務也在對該記錄進行修改操作,那麼就會導致在第一個事務中, 多次讀取到的事務不一致
3. 幻讀:是在一個事務中,多次讀同一資料,在這個事務執行期間,另外一個事務中新增一條新記錄,那麼就會導致在第一個事務中,會讀取到本不存在的記錄行
12,怎麼樣解決髒讀,不可重複讀,幻讀?MySQL的事務隔離級別
隔離級別:1,未提交讀 2,讀已提交 3,可重複讀, 4,序列化
13,Innodb使用哪種隔離級別?
預設使用的是可重複讀級別
14,MySQL鎖是什麼?
鎖產生的背景就是為了解決併發問題,來保證事務的一致性
15,MySQL-binlog有哪幾種記錄方式?
statement,row,mixed
statement,記錄單元為語句.即每一個sql造成的影響會記錄.由於sql的執行是有上下文的,因此在儲存的時候需要儲存相關的資訊,同時還有一些使用了函式之類的語句無法被記錄複製.
row級別下,記錄單元為每一行的改動,基本是可以全部記下來但是由於很多操作,會導致大量行的改動(比如alter table),因此這種模式的檔案儲存的資訊太多,日誌量太大.
mixed. 一種折中的方案,普通操作使用statement記錄,當無法使用statement的時候使用row.
16,大表分頁處理
原語句
select * from table where age > 20 limit 1000000,10
優化
SELECT * FROM table WHERE id in (SELECT id FROM table WHERE age > 20 limit 1000000,10)
SELECT * FROM table WHERE id > 1000000 LIMIT 10
本作品採用《CC 協議》,轉載必須註明作者和本文連結