No indexes suck, but you should pay attention to how you use them, or they can have unpleasant consequences when fulfilling your queries.
First up: layout / design
Why do you need to create a single column table? This is likely to take normalization one step further. Database design is one of the most important things to consider when optimizing performance.
Second: indices
In a nutshell, indexes will help the database perform a binary search of your record. Without an index in a column (or set of columns), the database often reverts to table scans. Scanning a table is very expensive because it involves listing each record.
Actually, it doesn’t matter that the index scans how many records are in the database table. Due to the double doubling of the (balanced) binary tree, the number of entries will result in only one additional search step.
Define the primary key of your table, SQL will automatically place the clustered index in this column (s). Clustered indexes work very well. In addition, you can place non-clustered indexes in columns that are often used in SELECT, JOIN, WHERE, GROUP BY, and ORDER BY statements. Remember that indexes have a certain overlap; never include your clustered index in a nonclustered index.
Also interesting may be the index fill factor. You want to optimize the table for reading (high fill factor - less storage space, less IO) or for writing (low fill factor, more storage, less rebuilding of database pages).
Third: separation
One of the reasons for using partitioning is to optimize data access. Let's say you have 1 million records, of which 500,000 records are no longer relevant, but are stored for archiving purposes. In this case, you can decide to split the table and keep 500,000 old records in slow storage, and the remaining 500,000 records in fast storage.
To measure, you need to know
The best way to get an idea of what is happening is to measure what is happening with your processor and io. Microsoft SQL Server has some tools, such as Profiler and Execution plans in Management Studio, that tell you about the length of your query, the number of read / write operations, and processor usage. The execution plan also indicates which or IF indices are used. To your surprise, you can see a table scan, although you did not expect this.