What are you connecting to on the SQL database ? If it's simple, you can change things in the database to only return a few records, then refresh & publish in Tableau, then fix the change in SQL so that all records are returned.
You definitely need to create the extract before publishing
Now coming to the size of the extract, which you have mentioned as one of the problems, you can try following methods to reduce Extract Size
1) Apply a extract filter to bring in only relevant data. E.g. If the workbook is going to be done only for Europe region then apply region filter selecting Europe in extract filters
2) Once you finish your dashboards, go to extract edit option and select hide unused fields (this will remove columns that were not used for development anywhere in the workbook, significantly bringing down extract size)1
3) For extract refresh, if old data does not change go for incremental refresh instead of full refresh as full refresh would take more resources plus puts load on server
Once you are sure that NO MODIFICATION WILL BE MADE TO THE COLUMNS USED (after hiding unused fields no additional columns will be added) then publish data source to server
Hope this helps !!