>>Problem is that there are combinations that I'll never care about

What do u mean by the above statement.

I would definitly go for the first solution, though ur taking more time on
the index, but u dont need to keep adding columns and doing joins as u think
would happen in the second approch.

Keep it as simple as possible


On 7/7/08, Waynn Lue <[EMAIL PROTECTED]> wrote:
>
> I have two tables, Applications and Settings.  Here are the two schemas:
>
> mysql> desc Applications;
>
> +-----------------+---------------------+------+-----+---------+----------------+
> | Field           | Type                | Null | Key | Default |
> Extra          |
>
> +-----------------+---------------------+------+-----+---------+----------------+
> | ApplicationId   | bigint(20) unsigned |      | PRI | NULL    |
> auto_increment |
> | ApplicationName | varchar(200)        | YES  |     | NULL
> |                |
>
> +-----------------+---------------------+------+-----+---------+----------------
>
> mysql> desc Settings;
> +---------------+---------------------+------+-----+---------+-------+
> | Field         | Type                | Null | Key | Default | Extra |
> +---------------+---------------------+------+-----+---------+-------+
> | ApplicationId | bigint(20) unsigned |      | PRI | 0       |       |
> | SettingId     | int(10) unsigned    |      | PRI | 0       |       |
> | SettingValue  | text                | YES  |     | NULL    |       |
> +---------------+---------------------+------+-----+---------+-------+
>
> Settings is just a multi map, where I'll have things like (1, 1, "true"),
> (1, 2, "short text"), (1, 3, "145"), etc.  Essentially each Application has
> multiple rows in Settings.
>
> There are values in Settings that I want to index, for example I want to
> find all ApplicationIds where SettingId = 34 and SettingValue = "149951".
> Here are the two methods I'm considering.
>
> 1.  Add an index on (SettingId, SettingValue).  It allows me to look for
> any
> arbitrary combination of SettingId, SettingValue, and it also gives me
> flexibility in that any thing I add to the table, it'll automatically be
> indexed.  Problem is that there are combinations that I'll never care
> about,
> so I'm wasting space and INSERT time.
> 2.  Pull the values that I'm interested in out into Applications, and add
> it
> as a column that that table with a secondary index.  I'll have to update
> both Applications and Settings in a transaction, and make sure they're kept
> consistent.  This is more efficient, but every time I want to index
> something new, I'll have to either take down Applications and add a new
> column, or I'll have to create another table and INNER JOIN it to
> Applications.
>
> Does anyone have experience building out a system that's similar?  Am I
> getting all the pros and cons?  Also, is a VARCHAR better than a text field
> in terms of indexing, or even in terms of performance?
>
> Thanks for any input,
> Waynn
>

Reply via email to