• Here is part of where being a DBA can be a bit of an art.

    Indexes and fragmentation can be avoided in several ways. First - let's get the clustered index out of the way - 99.99% of the time every table should have a clustered index. This orders the physical table data in the order of the index. Since this is the order of all of the data and every other index uses the clustered index to retrieve data, it is super important to not fragment it - so make sure to think that one through most carefully.

    Here is a simplified version:

    If you add data to a table in the same order an index is in, it will essentially not fragment during your inserts. You will always be adding data to the end of the index so you will not split pages. So, try to plan your indexing and your inserts together. If you have a bulk insert happening regularly, try to insert in the order of your clustered index and it will save you lots of reindexing.

    If you have a lot of sparse inserts or indexes that contradict the order you add data, these are the ones to use a fillfactor to help you out. Having a fillfactor basically just leaves space when an index is created so you have the ability to add data without splitting a page to get more space in your index. Every time you have to split a page you hurt performance because the new page ends up in a poorer position on the physical disk - requiring the read head to move really far.

    Having a ton of empty space in your indexes can slow you down a bit, but the pages being in the correct place on disk is so helpful that the performance hit you take moving from one page to another is usually pretty low. If you have a lot of queries that return records that are immediately next to each other, it can be helpful to have them on the same page, but a bigger fillfactor is usually a safer performance approach. The big problem is you will drastically increase the size of your database with a really low fillfactor, so be careful.

    Now, taking this and other posted information into account, you should be able to plan a bit. Focus on ensuring you don't fragment your clustered indexes. For the other indexes, plan a fillfactor that keeps fragmentation down and reindex just the ones that fragment frequently when you have to. Don't reindex everything all at once, schedule and plan to match when they are fragmenting.