Basic rules of efficient SQL:
1. Hit the right indexes
2. Avoid outer joins
3. Retrieve as much as possible in a single SQL statement
4. Don't do comparisons across different data types
These will help with the majority of SQL queries. Even if just stick to 1 and 4.
Just don't go overboard with indexes. You can have too many as well and this causes bulk inserts and updates to run like a dog.
An interesting thing about indexes though. There are times when an index is of no help. For example indexing the gender column is a waste of time. Indexes perform best when there are likely to be many distinct values. Bear that in mind. And if the table will never contain a lot of rows, then an index doesn't really make a difference. Ofc "a lot of rows" is a relative term
but that's why they pay us the big bucks 
1. Hit the right indexes
2. Avoid outer joins
3. Retrieve as much as possible in a single SQL statement
4. Don't do comparisons across different data types
These will help with the majority of SQL queries. Even if just stick to 1 and 4.
Just don't go overboard with indexes. You can have too many as well and this causes bulk inserts and updates to run like a dog.
An interesting thing about indexes though. There are times when an index is of no help. For example indexing the gender column is a waste of time. Indexes perform best when there are likely to be many distinct values. Bear that in mind. And if the table will never contain a lot of rows, then an index doesn't really make a difference. Ofc "a lot of rows" is a relative term