andrey888
26.03.2012 - 00:23
Как известно индексирование таблиц в бд приводит к заметному сокращению времени при запросах вида 'SELECT...'
Вопрос следующий: Если на основе проиндексированной таблицы создается VIEW и "SELECT" делается именно по "VIEW".
Будет ли команда "SELECT" по "VIEW" выполнятся так же быстрее при проиндексированной таблице ????
_____________
Прогноз на следующие 5 лет : Россия, Китай - две величайшие державы.
США в Ж*пе. Справедливость восторжествует. )
Placido
26.03.2012 - 00:49
Это зависит от алгоритма, который используется при обращении к представлению. Если это MERGE, то будет, если TEMPTABLE - нет.
Если в определении представления используются агрегатные функции, DISTINCT, GROUP BY, HAVING, LIMIT, UNION или UNION ALL, подзапросы в части SELECT, то будет использоваться алгоритм TEMPTABLE, и индексы при выборке из представления использоваться не будут (а будут использоваться только при создании временной таблицы).
Пруф:
http://dev.mysql.com/doc/refman/5.0/en/vie...strictions.htmlhttp://dev.mysql.com/doc/refman/5.0/en/view-algorithms.htmlhttp://habrahabr.ru/post/47031/
andrey888
26.03.2012 - 12:47
Тогда следующий вопрос.
Получается имея базу в несколько сотен тысяч пользователей - использование "VIEW - TEMPTABLE" будет смерти подобно -- так как шевелится такая штука будет очень медленно .
VIEW - TEMPTABLE - очень удобен с точки зрения безопасности (ничего нельзя изменять , удалять ) .
А если будем использовать VIEW - MERGE , то сохранение безопасности переходит исключительно на код ( чтоб нельзя было занести всякую бяку, удалить что то или изменить ) ..
Так как же быть ?
Как на уровне SQL можно добится примерно того что делает VIEW - TEMPTABLE , при этом чтоб индексы были задействованы и запросы не длились вечность ..?
Буду рад опытным мнениям...
_____________
Прогноз на следующие 5 лет : Россия, Китай - две величайшие державы.
США в Ж*пе. Справедливость восторжествует. )
Visman
26.03.2012 - 21:19
Цитата (andrey888 @ 26.03.2012 - 16:47) |
то сохранение безопасности переходит исключительно на код ( чтоб нельзя было занести всякую бяку, удалить что то или изменить ) .. |
Так и должно быть.
И дополню, юзер/модератор/админ не имеющий прав на какие-то действия, не должен даже видеть возможность таких действий в интерфейсе сайта.