在工作中SQL查詢時常會聽到Full Table Scan的意思如下。
Full table scan(全表掃描),意思是SQL查詢資料表時是從第一列(row)開始依序逐列讀取然後判斷條件(condition),直到找到相符的資料為止。通常在資料表沒索引(index)時會發生full table scan。
例如下面是一張member
資料表且name
欄位無索引。
member
id | name | age | created_at
---------+------+-----+----------------------------
1 | john | 33 | 2021-11-24 22:07:21.697726
2 | mary | 28 | 2022-03-19 11:27:07.237089
3 | tony | 45 | 2022-03-19 11:27:07.237089
...
999999 | zoey | 18 | 2022-04-01 09:22:19.429011
1000000 | lulu | 22 | 2022-10-10 10:18:09.318902
在查詢SELECT * FROM member WHERE name = 'emily'
則會從第一筆資料開始讀取然後判斷name
欄位的值是否為'emily'
,若否則繼續往下一行讀取直到找到為止。
上面member
資料表中有1,000,000筆資料,則full table scan就表示最糟的情況要查完1,000,000筆的資料並檢查條件導致效能低落,所以一般資料庫查詢時會避免full table scan的發生。
沒有留言:
張貼留言