Wilhel

Wilhel

周報 #五月 - 第19週,2023年

前言#

本篇是對 2023-05-082023-05-14 這週生活的記錄與思考。

生活#

  • 不背單詞新一輪組隊打卡開始了,繼續背單詞。
  • 有位很厲害、來公司很久了的同事被優化了,目前算是正式開始了,看看我能挺到第幾輪吧。
  • 本週食譜
    • 早餐
      • 燕麥酸奶杯

        一層酸奶,一層燕麥,提前做好放冰箱裡面密封冷藏一晚上,第二天早上直接帶到公司吃。又方便又好吃。

      • 貝果 + 乾酪

        貝果切半,密封袋冷凍保存。空氣炸鍋 180 度 5 分鐘,塗抹乾酪,可以再加個煎雞蛋。

      • 煎雞排 + 煎雞蛋

        晚上提前用奧爾良醃料醃製雞腿排,保鮮膜封上放冰箱。早上用黃油煎至兩面表層熟了後,加水蓋上鍋蓋悶幾分鐘。

  • 修改 xLog 全局字體設置
    @import url("https://cdnjs.cloudflare.com/ajax/libs/lxgw-wenkai-screen-webfont/1.7.0/lxgwwenkaiscreenr.css");
    
    :root {
    	--font-fans: "LXGW WenKai Screen R";
    }
    
  • 手欠把掃粉刷捲到磨豆機磨盤裡面了,結果拆磨盤的時候又把調節杆弄斷了,難受...

學習#

英語#

Attend 和 attempt 的區別#

  1. Attend 意為「照顧、照料」,也含有「出席」的意思。當表示「盡力」完成某事時,它側重於以關注和努力的心態對待該事情。
  2. Attempt 意為「嘗試、試圖」,表示為達到某目標或完成某事而採取的行動。它強調實際採取的行動和努力。
  3. 總結如下:
    • Attend 強調以積極主動的心態對待某事。
    • Attempt 強調實際採取的行動和努力。
    • Attend 比較靜態,Attempt 則比較動態。
    • 兩者在某些情況下可以互換,但 attend 着眼於心態,attempt 着眼於行為。

Hit the ground running#

固定搭配,意思是「立即開始迅速行動」。

表示立即進入一個新環境(新的工作崗位、項目等)後迅速開始行動,而不會耽搁或推遲。它表示一種積極主動和行動迅速的心態。

Fall prey to sth#

通常描述一方由於相對較弱小或不注意而受到更強大一方的侵襲、利用或影響的狀態。

Wishful thinking#

意為一廂情願的想法,指一種不切實際的或者過於樂觀的思維方式。

Multiplication table#

乘法表。

Stay put#

意思是留在原來所在的位置,不離開那裡或動身到其他地方。它表示靜止不動或不采取行動。用於建議或告知某人繼續呆在目前的位置,暫時不要離開或前往其他地點。

這通常是為了安全考慮,防止混亂或在等待進一步指示的情況下。它也可用於表示由於各種原因如工作需要而無法離開當前位置。

技術#

MySQL#

索引#

數據問題需要修改數據庫,select 查出來有 36 條數據,相同條件用 update 語句卻影響了全表 100 多萬行數據。聯繫 DBA 新增索引後,update 語句正常執行。

UPDATE `庫`.`表` SET  `字段a` = 'name' WHERE  `字段b` = 'message'  AND `字段a` = 'default'

-- 新增索引
-- idx_a_b	`字段a`, `字段b`	NORMAL	BTREE
原因

https://xiaolincoding.com/mysql/lock/update_index.html

InnoDB 存儲引擎的默認事務隔離級別是「可重複讀」,但是在這個隔離級別下,在多個事務並發的時候,會出現幻讀的問題,所謂的幻讀是指在同一事務下,連續執行兩次同樣的查詢語句,第二次的查詢語句可能會返回之前不存在的行。

因此 InnoDB 存儲引擎自己實現了行鎖,通過 next-key 鎖(記錄鎖和間隙鎖的組合)來鎖住記錄本身和記錄之間的「間隙」,防止其他事務在這個記錄之間插入新的記錄,從而避免了幻讀現象。

當我們執行 update 語句時,實際上是會對記錄加獨佔鎖(X 鎖)的,如果其他事務對持有獨佔鎖的記錄進行修改時是會被阻塞的。另外,這個鎖並不是執行完 update 語句就會釋放的,而是會等事務結束時才會釋放。

在 update 語句的 where 條件沒有使用索引,就會全表掃描,於是就會對所有記錄加上 next-key 鎖(記錄鎖 + 間隙鎖),相當於把整個表鎖住了。

總結

Update 語句必須滿足如下條件之一才能執行成功:

  • 使用 where,並且 where 條件中必須有索引列;
  • 使用 limit;
  • 同時使用 where 和 limit,此時 where 條件中可以沒有索引列;

Delete 語句必須滿足如下條件之一才能執行成功:

  • 使用 where,並且 where 條件中必須有索引列;
  • 同時使用 where 和 limit,此時 where 條件中可以沒有索引列;

如果 where 條件帶上了索引列,但是優化器最終掃描選擇的是全表,而不是索引的話,我們可以使用 force index([index_name]) 可以告訴優化器使用哪個索引,以此避免有機率鎖全表帶來的隱患。

收藏#

  • tldr 簡化且由社區驅動的 man 頁。
  • Vim Adventures 在線學習使用 Vim 的小遊戲。
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。