domyślnie null czy not null?
<p>w mysql lepiej jest zawsze dopuszczać wartości null, chyba że wiesz, że pole jest wymagane, lub zawsze używaj <code>not null</code> chyba że wiesz, że pole będzie zawierać wartości null? czy to nie ma znaczenia?</p><p>wiem, że w niektórych systemach dbms mówi się, że używają <code>not null</code> tyle, ile to możliwe, ponieważ zezwolenie na wartości null wymaga dodatkowego bitu (lub bajtu?) na rekord do przechowywania statusu null.</p>
<p>w większości baz danych a <code>not null</code> kolumna będzie bardziej wydajna pod względem przechowywanych danych z podanego powodu, a także bardziej wydajna w wyszukiwaniu i indeksowaniu - więc jeśli nie chcesz zezwalać na wartości null w kolumnie, powinieneś je wyraźnie zabronić.</p><p>będzie to miało niewielki wpływ na wydajność, ponieważ dodatkowe <code>not null</code> ograniczenia będą potencjalnie musiały być sprawdzane dla każdego wiersza, którego dotyczy zmiana za pomocą insert lub update, ale ponieważ większość baz danych jest względnie łatwa do zapisu i bardzo obciążona odczytem, ​​prawdopodobnie nie stanowi to problemu (mało czasu poświęconego na to jest zauważalne przy w każdym razie, ponieważ jest to operacja związana z procesorem, w której reszta operacji wstawiania/aktualizacji będzie związana z operacjami we/wy, a więc o wiele bardziej znaczącym „wąskim gardłem” i daje pewne „bezpłatne” sprawdzanie danych, więc kod (lub inny) kod osoby) nie może przypadkowo umieścić wartości null tam, gdzie inny kod ich nie oczekuje, a zatem może dawać nieprawidłowe wyniki w ich obecności.</p><p>edycja: jak peter wskazuje w swoim komentarzu, powyższe jest generalizmem i może nie być prawdziwe dla <em>wszystkich</em> dmbs, chociaż jestem prawie pewien, że tak jest w przypadku mysql i mssql. inne komplikacje w tym obszarze mogą obejmować takie funkcje, jak rzadkie tabele (na przykład zaimplementowane mssql 2008), które zmienią dynamikę wydajności (nie) zerowalnych kolumn.</p>
IAM nie wiem, to jest to, czego szukasz, ale jeśli rozumiem można to zrobić:


-on sprawdzić obciążenie aktualizacja wartości QS, jeśli jej nie ma użyć ukrytego pola wprowadzania.


-pierwsze czas ładowania strony z QS, zrobić swoje normalne przetwarzanie i przechowywanie wartości QS w polu wejściowym ukrytym. 


-Jeśli nie ma QS następnie użyj ukrytej wartości wejściowej


-po odświeżenie strony, można przekierować do tej samej strony, w tym momencie można użytkownik Request.Form [], aby odzyskać pole wprowadzania ukryty, nadal załadować dane poprawnie, ale pozbyć się QS.


to miało sens w mojej głowie, nie jestem pewien, że to ma sens teraz, ale ja nie pozwolę ci zdecydować. Podanie uzasadnienia negatywnej oceny byłoby dobrą opcją, bo wszyscy wiedzieliby co dla kogo jest powodem do "minusowania". A to mogłoby niektóre osoby przyhamować w swoich zapędach.  

Jednak zajmowanie się rozstrzyganiem kto ma rację przez moderatorów jest niewykonalne, bo ich tylu nie ma.  

Propozycja taka i podobne pojawiały się na forach, ale to niestety to w większości ginie nieprzeczytane, bo:  

1) tu - nie po angielsku;  

2) po angielsku też nie ma kto tego czytać, bo jest tego ogrom;  

3) pracownicy mają inne przydzielone zadania.  

Niestety tak to wygląda. Mimo wszystko życzę udanych batalii z trolami. To naprawdę zależy od rodzaju danych, które zabierasz powrotem. Ponieważ zbiór danych (w efekcie) tylko zbiór DataTable obiektów, można zwracać wiele różnych zestawów danych w jednym, a więc łatwiejsze, obiektu. 


Performance-mądry, jesteś bardziej prawdopodobne, aby uzyskać nieefektywność z zapytaniami niezoptymalizowanych niż z „niewłaściwym” wybór .NET konstruktu. Przynajmniej tak było moje doświadczenie. Z ograniczeniem, że klauzula warunek może być „coś”, to jesteś ograniczony do skanowania całą listę i stosując warunek.


Jeśli istnieją ograniczenia dotyczące klauzuli stan, wtedy można spojrzeć na organizowanie danych do bardziej efektywnie obsługiwać zapytań.


Na przykład, przykładowy kod z „byFirstLetter” słowniku nie pomaga w ogóle z „endswith” zapytania.


Więc tak naprawdę sprowadza się do tego, co pyta chcesz zrobić przed tymi danymi.


W bazach danych, problem ten jest ciężar „optymalizator zapytań”. W typowej bazy danych, jeśli masz bazę danych bez indeksów, oczywiście każde zapytanie będzie skan tabeli. Jak dodać indeksów w tabeli, optymalizator może użyć tych danych do bardziej wyrafinowanych zapytań planuje lepiej dostać się do danych. To w istocie problem, który opisujesz.


Gdy masz bardziej konkretny podzbiór typów kwerend następnie można zrobić lepszą decyzję, co struktura jest najlepsza. Ponadto, należy wziąć pod uwagę ilość danych. Jeśli masz listę 10 elementów każdy mniej niż 100 bajtów, skan wszystko może okazać się najszybciej, co można zrobić, ponieważ masz taką małą ilość danych. Oczywiście, że nie skaluje się do elementów 1M, ale nawet sprytnych technik dostępu nosić koszt w instalacji, konserwacji (jak utrzymanie indeksu) i pamięć.


**EDIT** , na podstawie komentarza


Jeśli jest to auto Nieukończenie, jeśli dane są statyczne, a następnie posortować je i używać przeszukiwanie binarne. Nie jesteś naprawdę dzieje się szybciej niż to.


Jeśli dane są dynamiczne, a następnie zapisać go w zrównoważonym drzewie, i szukać tego. To skutecznie wyszukiwanie binarne, a to pozwala zachować dodać dane losowo.


Coś jeszcze jest jakaś specjalność na tych pojęć. Never mind albo forget it - jeśli coś było kiedyś ważne, ale już nie jest (w odpowiedzi na coś)
(sth is) not important - generalnie, coś nie jest ważne (np. gdy mówi się o tym pierwszy raz)


"Już nieważne" wskazuje na to, że coś było kiedyś ważne, a teraz nie jest. Zatem można użyć formy "Never mind", lub poprawniejszego, pełnego zwrotu "It's not important anymore" (to nie jest już ważne). Replikacja [works by reading the transaction log](https://technet.microsoft.com/en-us/library/ms151706%28v=sql.105%29.aspx) .

Ten rodzaj „aktualizacji bez aktualizacji” często nie generuje żadnych rekordów dziennika transakcji.

Więcej informacji na ten temat można znaleźć w artykule Paula White'a [The Impact of Non-Updating Updates](http://sqlblog.com/blogs/paul_white/archive/2010/08/11/the_2D00_impact_2D00_of_2D00_update_2D00_statements_2D00_that_2D00_don_2D00_t_2D00_change_2D00_data.aspx) . źle zrozumiałem problem, myślałem, że chcesz rozciągnąć w poziomie - mój błąd. 

dane mogą zostać w tabeli, ale dolne menu robiłbym już w nav>ul>li, również nie robiłbym breadcrumbsów u góry w tabeli. 
wracając już do problemu, będziesz miał trochę ciężko to zrobić. wydaje mi się, że najlepiej będz… Jest to dość szerokie, ale dam ci tak ogólną odpowiedź, jak tylko mogę.

**CTE ...**

* Są niezindeksowalne (ale mogą używać istniejących indeksów na obiektach, do których istnieją odwołania)
* Nie można mieć ograniczeń
* Są zasadniczo jednorazowe `VIEW` s
* Trwać tylko do momentu uruchomienia następnego zapytania
* Może być rekurencyjny
* Nie masz dedykowanych statystyk (polegaj na statystykach dotyczących podstawowych obiektów)

**#Temp Tables ...**

* Są prawdziwe zmaterializowane tabele, które istnieją w tempdb
* Może być indeksowany
* Może mieć ograniczenia
* Trwaj w życiu obecnego POŁĄCZENIA
* Może odwoływać się do innych zapytań lub podprocedur
* Masz dedykowane statystyki generowane przez silnik

Jeśli chodzi o użycie każdego z nich, mają bardzo różne przypadki użycia.Jeśli masz bardzo duży zestaw wyników lub musisz odwołać się do niego więcej niż raz, umieść go w tabeli `#temp` .Jeśli ma być rekurencyjny, jednorazowy lub po prostu dla uproszczenia logicznego, preferowany jest `CTE` .

Ponadto należy `CTE`**nigdy nie używaj do wykonania**.Prawie nigdy nie przyspieszysz przy użyciu CTE, ponieważ znowu jest to widok jednorazowy.Możesz zrobić z nimi kilka fajnych rzeczy, ale przyspieszenie zapytania nie jest jednym z nich. Obie alternatywy, które zostały wskazane ma wady i zalety, decyzja zależy od tego jak to plusy i minusy wpływa na aplikację:



> 
> Pobrać wszystkie wartości z bazy danych przy użyciu zwykłego PHP następnie przechowywać je w zmiennej JavaScript, później szukać sekund rozwijanej listy (jeśli wartość pierwszej rozwijanej liście na zmiany wartości) w zmiennej JavaScript (array).
> 
> 
> 


Plusy:


* Minimalizuje petycje http, trzeba tylko jedną prośbę, aby odzyskać całość danych.
* Minimalizuje kwerenda jest potrzebne w bazie danych, na ogół tylko wykonać jedno zapytanie.


Cons:


* Zwiększa ilość pamięci używanej jeśli masz duże ilości danych.
* Jeśli dane zmienia się nieustannie, użytkownicy nie widzą zmian aż odświeżyć całą stronę.



> 
> Jeśli pierwszy rozwijanej liście zmian wartości jest następnie pobrać wartości dla drugiej listy rozwijanej z bazą danych za pomocą technologii AJAX (jQuery).
> 
> 
> 


Plusy:


* Nie trzeba do przechowywania wszystkich danych w pamięci całych jedynie dane, które zostaną wykorzystane, co zmniejsza ilość potrzebnej pamięci.
* Twoje dane są aktualizowane za każdym razem, bez konieczności przeładowania strony tylko zmieniając wybór.


Cons:


* Trzeba wykonać kilka petycji HTTP i biegnie querys z bazą danych przy każdej zmianie wyboru.


Osobiście preferuję metodę 2, jeśli ilość danych jest stosunkowo duża i wydajność nie jest koniecznością. Jest to istotne, jeśli mają miejsce, w którym dane mogą zapełnić się partycję i zapobiec coś innego z systemem; Pliki dziennika aplikacji może wypełnić partycji i nie pozostawiają miejsca na tmp inne aplikacje do zapisu lub systemu operacyjnego do zapisu, tak tak, nadal istnieją istotne powody do partycji. Wystarczy spojrzeć na to, co trzeba i zdecydować, czy cokolwiek może zapobiec reszty systemu przed użyciem. Jeśli tak, chcesz podzielić się więc, że jeśli robi się maksymalną przestrzeń, tylko niszczy się.