Если объединить все внешние ключи в одно поле, запросы становятся сложными. Невозможно больше использовать равенство, вместо этого требуется проверка по некоторому шаблону. Например, чтобы найти все продукты для учетной записи 12, в базе данных MySQL можно ввести что-то типа этого:
Файл примера-.Jaywalking/anti/regexp.sql
SELECT * FROM Products WHERE account_id REGEXP ' [[:<:]] 12 [[:>:]]' ;
Выражения сравнения с шаблоном могут возвращать ложные совпадения и не позволяют воспользоваться преимуществами индексов. Поскольку синтаксис сравнения с шаблоном зависит от модели базы данных, код SQL не может быть одинаковым для баз данных разных производителей.
Запрос учетных записей для заданного продукта
Подобным образом неудобно и затратно объединять список, разделенный запятыми, с сопоставляемыми строками в справочной таблице.
Файл np»Mepa:_Jaywalking/anti/regexp.sql
SELECT * FROM Products AS p JOIN Accounts AS a
ON p.account_id REGEXP '[[:<:]]' II a.account_id || '[[:>:]]' WHERE p.product_id = 123;
Если объединить две таблицы с помощью выражения, подобного этому, отсутствуют какие-либо шансы использования индексов. Запросом должны выполняться сканирование обеих таблиц, генерирование векторного произведения и оценка регулярного выражения для каждой комбинации строк.
Опубликовал vovan666
June 18 2013 12:24:23 ·
0 Комментариев ·
3785 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.