I have a screen where the user will be querying using all columns in the list. Should i index every column.
What are the rules around this?
Would there be any performance problems?
NO, Index the columns that you search and filter on, try and stay at a maximum of 2.
This works exactly like a database, the more indexes the slower updates and additions become.
Columns that you might want to index are:
Any column that appears in JOINS or WHERE statements.
As you probably are aware use of Indexing is meant to increase performance, particularly in querying, filtering and sorting in large lists, avoiding database scanning, etc. But also over-doing could fall in other extreme (beyond the actual limit of 20), e.g. remember that each update in the structure would require adding a row in NameValuePair table in Content database, which grows extremely fast. Have a look at this link.
You should understand the fact the there are Simple or Compound, as a rule: - Create single indexes for a single field to filter e.g. with the CQWP and create compound indexes for queries that are going to filter two columns.
I have been working with SharePoint lists for a few year now and have experimented with indexes both single and compound with item counts in the hundreds and thousands (20k+).
And here is what I have observed.
For more information on SharePoint indexes you can review SharePoint Index Column – Complete tutorial for a "technical" explanation.