Too many columns to index - use mySQL Partitions?
Posted
by
Christopher Padfield
on Stack Overflow
See other posts from Stack Overflow
or by Christopher Padfield
Published on 2010-12-13T13:19:15Z
Indexed on
2011/01/08
14:53 UTC
Read the original article
Hit count: 186
We have an application with a table with 20+ columns that are all searchable. Building indexes for all these columns would make write queries very slow; and any really useful index would often have to be across multiple columns increasing the number of indexes needed.
However, for 95% of these searches, only a small subset of those rows need to be searched upon, and quite a small number - say 50,000 rows.
So, we have considered using mySQL Partition tables - having a column that is basically isActive
which is what we divide the two partitions by. Most search queries would be run with isActive=1
. Most queries would then be run against the small 50,000 row partition and be quick without other indexes.
Only issue is the rows where isActive=1
is not fixed; i.e. it's not based on the date of the row or anything fixed like that; we will need to update isActive
based on use of the data in that row. As I understand it that is no problem though; the data would just be moved from one partition to another during the UPDATE query.
We do have a PK
on id
for the row though; and I am not sure if this is a problem; the manual seemed to suggest the partition had to be based on any primary keys. This would be a huge problem for us because the primary key ID has no basis on whether the row isActive
.
© Stack Overflow or respective owner