網頁

2022/11/20

資料庫 什麼是Full Table Scans?

在工作中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的發生。


沒有留言:

張貼留言