I have a table(users) with columns as
id INT AUTOINVREMENT PRIMARY
uid INT index
email CHAR(128) UNIQUE
activated TINYINT
And I’ll need to query this table like this:
SELECT * FROM users WHERE uid = ? AND activated = 1
My questions is, since there’s an index set on the ‘uid’ column, in order to get the best performance for the above query, do I need to set another index to the ‘activated’ column too? This table(would be a big one) will be heavily accessed by ‘INSERT’, ‘UPDATE’ statements as well as ‘SELECT’ ones.
As I’ve learned from other sources that indexes goes opposite to ‘INSERT’ and ‘UPDATE’ statements, so if the index on the uid column is enough for the query above I won’t have to set another index for activated for ‘insert & update’s performance sake.
MySQL will only use 1 index per table anyway, so having an additional index will not help.
However, if you want really optimal performance, define your index on both columns in this order: (eg. 1 index across 2 columns)
That will allow optimized lookups of just
uid, oruid AND activated.