vecina to brani zato sto ih mrzi ili ne znaju ... dobar deo njih brani zato sto 90% programera koji koriste view's iste koristi na pogresan nacin, posebno kada je mysql u pitanju gde je view samo sql rewriter za razliku od orakla gde mozes da imas material view i jos gomilu drugih "fora"... kako developeri cesto misle da se na mysql-u view ponasao kao i na nekim drugim sistemima (gde view stvarno doprinosi brzini) u view stavljaju "izvrsi samoubistvo" upite koji zabadaju server i onda ih zovu "non stop" ... da se ne bi provajder smarao sa tim, oni lepo zabodu view's i miran balkan ...
kako promeniti .... zavisi od provajdera do provajdera ... ako su ovi iz tehnike papani, nikako, ako su inteligentni mozda ce ti posvetiti vreme i dozvoliti ti tako nesto .. sve u svemu u 99% slucajeva neces resiti problem .. ja sam promenio licno za svoje potrebe jedno 30tak hosting provajdera i na kraju sam svatio da ne postoji "dobar hosting provajder" ako hoces bilo sta "out of the box" bez da uzmes svoj server... obzirom da sada mozes za 40tak evra mesecno da imas "zversku masinu" ....
veliki deo problema je tu mysql - da se ne lazemo, nisu provajderi uvek debili .. vrlo cesto jesu ali .. koliko god da je mysql jedan od osnovnih razloga zasto je web danas tu gde je, isto tako je mozda najgori servis koji provajder hostuje ... (ne znam da li je pgsql bolji po tom pitanju, nikad ga nisam hostovao negde) posto jedan user na mysql-u moze da zakuca resurse servera "iz odma" i ne postoji regularan nacin da se to kroz mysql resi... zato razni host provajderi pribegavaju merama da "upit ne moze da traje duze od X sekundi" i slicno, i onda obican bekap ne moze da prodje kad vam treba i slicno ... to je jedan od prvih 10 razloga zasto je ba sa ekipom pokrenuo drizzle posto su oni u startu krenuli da promene arhitekturu tako da bude moguce hostovati isti bez velikih problema koje svi hosting provajderi danas imaju sa mysql-om
da se vratimo na pocetak ...
ako imas view
CREATE VIEW v AS SELECT t1.a as a, t2.a as b FROM t1, t2 where t1.x = t2.y;
i uradis
SELECT * FROM v where a > 10;
sve sto ce mysql da uradi je
1. izgubi vreme na proveravanje prava i cuda ako view ima setovana prava i cuda
2. izvrsi taj select kao pandam: SELECT * FROM (SELECT t1.a as a, t2.a as b FROM t1, t2 where t1.x = t2.y) x WHERE x.a > 10;
1+2 je uvek sporije nego da si uradio SELECT t1.a as a, t2.a as b FROM t1, t2 where t1.x = t2.y and t1.a > 10;
samim tim, da bi smanjio pritisak na bazu, provajder te tera da pises "bolji" upit time sto ti ne dozvoljava da koristis view