Мне нужно создать таблицу, которая назначает идентификатор пользователя и идентификатор продукта некоторым данным (модели 2 от одного до многих отношений). Я сделаю много запросов, какSQL where performance performance
select * from table where userid = x;
Первое, что я заинтересован в том, как велика должна таблица получить до того, как запрос начинает наблюдаться (скажем, это занимает больше, чем 1 секунда).
Также, как это можно оптимизировать?
Я знаю, что это может зависеть от реализации. Я буду использовать mysql для этого конкретного проекта, но меня тоже интересуют более общие ответы.
Благодарим вас за ответ. Ваш ответ основан на сложности бинарного поиска. Однако для двоичного поиска требуется сортировка данных (в этом случае, после user_id). Что делать, если я ищу product_id? Использует ли sql некоторые сложные структуры данных, которые позволяют выполнять двоичный поиск в любом столбце? – Paul92
@ Paul92 Это то, что индексы mysql предназначены для: всякий раз, когда вы создаете индекс в определенном столбце, mysql будет поддерживать отсортированный список столбца * that *, чтобы выполнить бинарный поиск на нем. Вот почему индексы быстро ищут, но замедляют вставки вниз (тогда индекс также должен быть обновлен). – dognose
См. Также: http://dev.mysql.com/doc/refman/5.0/ru/mysql-indexes.html – dognose