I'm trying to understand something so I can use @testSetup annotation wisely.
As i read here: 

> https://developer.salesforce.com/docs/atlas.en-us.202.0.apexcode.meta/apexcode/apex_testing_testsetup_using.htm
> 
>  By setting up records once for the class, you don’t need to re-create records for each test method. Also, because **the rollback of records that are created during test setup happens at the end of the execution of the entire class**, the number of records that are rolled back is reduced

But if you run a test class, you can see that all of the DMLs are recreate for each test **method** and not just once.

So what is the purpose of using it if I need to add an extra SOQL to retrieve the data I created in each test method? why not just using it in the test class itself and use it directly?
just to reduce a code duplication?

**Edit**:
Seems like I was confused because of what I read here:

> https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_annotation_testsetup.htm
> 
> If a test class contains a test setup method, the testing framework executes the test setup method first, **before any test method in the class**.

Thanks for your comment Phil.