《葉問》第7期

tplinux發表於2018-11-29

2018年8月9日,週四

MySQL的表中有唯一索引,設定unique_checks為0時,還能否寫入重複值?

1、首先,即便設定unique_checks=0,也無法往唯一索引中寫入重複值。
2、其次,設定unique_checks=0的作用在於,批量匯入資料(例如load data)時,在確保匯入資料中無重複值時,無需再次檢查其唯一性,加快匯入速度。
3、所以,unique_checks=0並不是允許唯一約束失效,而是再批量導資料時不再逐行檢查唯一性。

2018年8月15日,週六

某人曰,在資料檢索的條件中使用!=操作符時,儲存引擎會放棄使用索引。 理由:因為檢索的範圍不能確定,所以使用索引效率不高,會被引擎自動改為全表掃描。你認可他的說法嗎?

1、答:通常情況下,這個說法是正確的。當然,也有特殊情況,話不能說絕對了。
有一個測試表共80萬條資料,其中type列只有1、2兩個值,分別佔比97%和3%。 這種情況下,查詢條件 WHERE type != 1,是有可能也可以走索引的。

下面是兩個SQL的執行計劃:
mysql> desc select * from t1 where type = 1G
1. row
id: 1
select_type: SIMPLE
table: t1
partitions: NULL
type: ref
possible_keys: type
key: type
key_len: 4
ref: const
rows: 399731
filtered: 100.00
Extra: NULL
mysql> desc select * from t1 where type != 1G
1. row
id: 1
select_type: SIMPLE
table: t1
partitions: NULL
type: ref
possible_keys: type
key: type
key_len: 4
ref: const
rows: 10182
filtered: 100.00
Extra: NULL

type資料分佈
mysql> select type, count(*) as cnt from t1 group by type order by cnt;
+——+——–+
| type | cnt |
+——+——–+
| 2 | 38304 |

2018年8月17日,週一

Redis叢集的slot遷移是如何實現的?

1、答:遷移源slot設定為migrating 狀態,遷移目標slot設定為importing狀態。
2、在內部用dump & restore命令,把資料遷移到目標節點,遷移結束之後,移除migrating和importing狀態。
3、在遷移過程中如果有資料訪問,如果資料沒遷移到目標節點,那麼直接返回結果,如果遷移到目標節點,那麼給客戶端返回ASK重定向。

2018年8月27日,週一

在大表執行ddl的過程中,若臨時中斷,會發生什麼狀況,需要特別處理嗎 ?

前提說明:MySQL5.7.23、innodb表、“雙1”

1、新增/刪除列,採用copy的方式
1.1、ctrl+c。在當前session中,手動執行ctrl+c。無影響,並且會自動刪除產生的臨時檔案。
1.2、kill -9。在執行ddl的時候,伺服器發生意外當機或者手動執行kill -9。待MySQL啟動後,則會自動執行InnoDB Recovered流程。並且不會刪除產生的臨時檔案,需要手工處理。
2、新增/刪除索引,採用INPLACE方式
2.1、ctrl+c,同1.1
2.2、kill -9。不會刪除臨時檔案,也不會執行InnoDB Recovered流程並且報錯 Operating system error number 2 in a file operation ….OS error: 71

在開始執行alter table的過程中,在沒有結束的時候,並不會寫入到binglog檔案中。


相關文章