Originally Posted by

**svidgen**
For instance, I would argue that storing colors as a comma-delimited string lowers the complexity of accessing a produce from O((M/N)*Log(M)*Log(N)) to (Log(M)) where N is the total number of color assignments used (relationships between a color and a product) and M is the number of products in the products table.

Log(N) is the cost of the product lookup, assuming a BTREE index.

Log(M) is the cost of the color lookup, assuming a BTREE index.

M/N is the average cost of joining the product to its colors.

So, by denormalizing the data, you're looking at saving a M/N Log(N) lookups, each of which will be a higher cost than the *single* Log(M) lookup needed for the denormalized form.