Вверх ↑
Ответов: 16489
Рейтинг: 1210
#1: 2016-02-10 09:14:46 ЛС | профиль | цитата
tom-it писал(а):
получается перебор всех книг ?
Gunnman писал(а):
Почему перебор всех книг?
Как говорит мой правнук : "Потомучто".
Gunnman писал(а):
select * from knigi where name like '%ро%';
1;ромео и джульетта
2;робинзон крузо
при таком запросе ещё найдёт и
3;прошлогодние листья
4;тореро
и т.д. и т.п. А вот запрос
select * from knigi where name like 'ро%';
выбрал бы только то, что ты написал. Так что со знаком "%" поаккуратней.
select * from knigi where name like 'ро%'; - проверяются только ДВЕ первые буквы name
select * from knigi where name like '%ро'; - проверяются только ДВЕ последние буквы name
select * from knigi where name like '%ро%'; - проверяются ВСЕ буквы name
Gunnman писал(а):
Допустим у нас 3 автора и 300 книг (по 100 на каждого)
Выбираем первого автора, соответственно сужаем круг поиска до 100 книг этого автора.
а для этого перебирается вся таблица
Даже если бы ты написал
select * from knigi where name like 'ро%' and author=1;всё равно будет перебрана вся таблица книг БД
Так что тут tom-it прав.
Но при таком запросе отработает оптимизатор запросов, который сначала отберёт все записи, относящиеся к этому автору, во временную таблицу и только потом из этой временной таблицы отберёт записи, удовлетворяющие условию LIKE

------------ Дoбавленo в 08.39:
При 1000000 записей твой запрос будет выполнен за ~15-30 минут.
Это всё справедливо для случая без применения ИНДЕКСНЫХ файлов (таблиц)
Вся надежда только на то, что у tom-it в библиотеке будет книг намного меньше.
карма: 22
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0