Every time I find out that the performance of data retrieval from my database is slow. I try to figure out which part of my SQL query has the problem and I try to optimize it and also add some indexes to the table. But this does not always solve the problem.
My question is : 
Are there any other tricks to make SQL server performance better?
What are the other reason which can make SQL server performance worse?
                 
                                                                            
                            
- Inefficient query design
 
- Auto-growing files
 
- Too many indexes to be maintained on a table
 
- Too few indexes on a table
 
- Not properly choosing your clustered index
 
- Index fragmentation due to poor maintenance
 
- Heap fragmentation due to no clustered index
 
- Too high FILLFACTORs used on indexes, causing excessive page splitting
 
- Too low of a FILLFACTOR used on indexes, causing excessive space usage and increased scanning time
 
- Not using covered indexes where appropriate
 
- Non-selective indexes being used
 
- Improper maintenance of statistics (out of date statistics)
 
- Databases not normalized properly
 
- Transaction logs and data sharing the same drive spindles
 
- The wrong memory configuration
 
- Too little memory
 
- Too little CPU
 
- Slow hard drives
 
- Failing hard drives or other hardware
 
- A 3D screensaver on your database server chewing up your CPU
 
- Sharing the database server with other processes which compete for CPU and memory
 
- Lock contention between queries
 
- Queries which scan entire large tables
 
- Front end code which searches data in an inefficent manner (nested loops, row by row)
 
- CURSORS which are not necessary and/or are not FAST_FORWARD
 
- Not setting NOCOUNT when you have large tables being cursored through.
 
- Using a transaction isolation level which is too high (such as using SERIALIZABLE when it's not necessary)
 
- Too many round trips between the client and the SQL Server (a chatty interface)
 
- An unnecessary linked server query
 
- A linked server query which targets a table on a remote server with no primary or candidate key defined
 
- Selecting too much data
 
- Excessive query recompilations
 
oh and there might be some others, too.