# Non-Clustered Index for Hidden Primary Key - `TableFullScan` Example
+ Column **`id`** is **_NOT_** the primary key
+ Column **`id`** has **_NO_** index
+ To fulfill the query, a **`TableFullScan`** operation is needed

```
tidb> SHOW CREATE TABLE universe.planets;

tidb> CREATE TABLE `planets` (
  `id` bigint(20) DEFAULT NULL,
...

tidb> EXPLAIN
  SELECT mass, gravity
  FROM universe.planets
  WHERE ~!@id = 3@!~;

+---------------------------+---------+-----------+---------------+-------------------------------------------+
| id                        | estRows | task      | access object | operator info                             |
+---------------------------+---------+-----------+---------------+-------------------------------------------+
| Projection_4              | 2.00    | root      |               | test1.planets.mass, test1.planets.gravity |
| └─TableReader_7           | 2.00    | root      |               | data:Selection_6                          |
|   └─Selection_6           | 2.00    | cop[tikv] |               | eq(test1.planets.id, 3)                   |
|     └─~!@TableFullScan@!~_5     | 20.00   | cop[tikv] | table:planets | keep order:false                          |
+---------------------------+---------+-----------+---------------+-------------------------------------------+
```
![`smart`](NonClusteredTableWithoutPrimaryKey_en_001_20231116.png)
------------------------------------------------------------------------------
As a general rule of thumb, `TableFullScan` should be avoided as much as possible. We will discuss more about `TableFullScan` in chapter 4. 