What is the difference between indexing and sharding. What is the role of both?
Indexing is a way to store column values in a datastructure aimed at fast searching. This speeds up a search tremendously compared to a full table scan since not all rows will have to be examined. You should consider having indices on the columns in your WHERE clauses.
Sharding is a technique to split the table up between different machines. This makes it possible for parallell resolution of queries. For example, half the table can be searched on one machine and the other half on another machine. This will in some cases make it possible to increase the performance by adding more hardware, especially for large tables.