Statistika rychlosti mazání řádků ve velké tabulce

1
2
3
4
create table test24(
	id int identity,
	d datetime not null
)

Do tabulky jsem vložil 20 milionů řádků s různými datumy. Pro mazání jsem použil příkaz:

1
2
3
4
begin transaction
	delete top(500000) from test24
		where d > '2010-07-10 08:25:20.173'
rollback

Tato akce trvala:

  • 6 sekund - bez indexů
  • 12 sekund s create clustered index CI_d on test24(id)
  • 32 sekund s create nonclustered index NIX_d on test24(d)
  • 37 sekund pokud tabulka obsahuje oba indexy výše
  • 33 sekund po rebuildu nonclustered indexu

Při mazání se používal index scan. Index seek se použil při mazání max. 5 tis. záznamů, nicméně aktualizace indexu při tolika záznamech vyžaduje velkou časovou náročnost.

  • Share/Bookmark
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

Konfigurace virtualhost a virtuálních adresářů v apache pro více domén

Zde je ukázka editace httpd.conf, ve které jsou vytvořeny 2 virtualhosty na stejném serveru pro 2 domény. Každý virtualhost může obsahovat virtuální adresáře, ve kterých se specifikuje chování adresáře, např. Options +Indexes umožní listování v adresáři.

Pomocí alias /virtuální_adresář /cesta_na_disku se vytvoří virtuální adresář.

Hosts

Mohu editovat soubor c:\WINDOWS\system32\drivers\etc\hosts. V něm zadat např.:

127.0.0.1 www.example1.com example1.com

S takovým zápisem je zajištěno, že se při zadání domén www.example1.com a example1.com provede poždavek na 127.0.0.1 a ne na veřejné adresy k www.example1.com a example1.com.

Ukázka virtualhostu

ServerName=host
DirectoryIndex= seznam indexových souborů v pořadí oddělených mezerou
<Directory…> = adresář, který bude mít nějaké vlastnosti. tento adresář lze udělat virtuálním přes zápis Alias /adresář /cesta_na_disku

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<VirtualHost *:80>
  ServerName www.example1.com
  DocumentRoot c:/download/zf-tutorial/public
  ErrorLog logs/www.example1.com-error_log
  CustomLog logs/www.example1.com-access_log common
  DirectoryIndex index.php
 
  <Directory c:/download/zf-tutorial/public>
      AllowOverride All
      Allow from All
      Options +Indexes FollowSymLinks
  </Directory>
 
</VirtualHost>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<VirtualHost *:80>
  ServerName net08
  DocumentRoot c:/development
  ErrorLog logs/net08-error_log
  CustomLog logs/net08-access_log common
  DirectoryIndex index.php
  Alias /web c:/Development/phpcore/
  Alias /pokus c:/Download/pokus/
 
    <Directory c:/Development>
      AllowOverride All
      Order allow,deny
      Allow from all
      Options +Indexes
    </Directory>
 
    <Directory c:/Development/phpcore>
      Order allow,deny
      Allow from all
      Options +Indexes
    </Directory>
 
    <Directory c:/Download/pokus>
      Order allow,deny
      Allow from all
      Options +Indexes
    </Directory>
 
</VirtualHost>
  • Share/Bookmark
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

Pořadí výchozích parametrů pro funkci v PHP je důležité

PHP umožňuje nastavit výchozí hodnotu pro parametr do funkce(nebo metody). Zápis:

1
function foo($param=20)

způsobí že po zavolání funkce bez předaného parametru

1
foo();

bude ve funkci mít proměnná $param hodnotu 20.

Toto ovšem nebude fungovat v případě, že se zavolá funkce např. takto:

1
foo(null);

Parametr se předá, ovšem obsahuje null, což bude obsahovat i $param.

Ukázka situací, jak záleží na pořadí při předávání parametrů do funkce:

Zde se naplní první parametr(ne až druhý):

1
2
3
4
5
function foo($param1=10,$param2){
   echo "$param1: ".$param1."<br />";
   echo "$param2: ".$param2."<br />";
}
foo(20);

vrátí:
$param1: 20
$param2:

Zde je vidět že při volání s jedním parametrem se druhý doplní jeho výchozí hodnotou:

1
2
3
4
5
function foo2($param1,$param2=20){
   echo "$param1: ".$param1."<br />";
   echo "$param2: ".$param2."<br />";
}
foo2(10);

vrátí:
$param1: 10
$param2: 20

V tomto volání se do $param1 předá null. Není tedy brána výchozí hodnota 10.

1
2
3
4
5
function foo3($param1=10,$param2){
   echo "$param1: ".$param1."<br />";
   echo "$param2: ".$param2."<br />";
}
foo3(null,20);

vrátí:
$param1:
$param2: 20

Výsledkem je tedy to, že parametry s výchozí hodnotou by vždy měli být v posloupnosti psány až za parametry, které výchozí hodnotu neobsahují.

  • Share/Bookmark
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

Firefox a Internet explorer shodí otevření PDF

Stalo se mi, že ve WINXP po kliknutí na jakýkoliv PDF soubor v prohlížeči se jak Firefox, tak Internet Explorer neočekávaně ukončili. Na vině je chybná knihovna ace.dll.

Řešením je zkopírovat c:\Program Files\Adobe\Reader 9.0\Reader\ace.dll do c:\WINDOWS\system32\ace.dll. Soubor přepsat.

Otevírání PDF souborů poté začne fungovat ihned bez nutnosti restartu prohlížeče.

  • Share/Bookmark
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

Ignore_dup_key

Na unikátní indexu se dá povolit ignore_dup_key. Použití je v příkazu insert. Pokud se bude náhodou vkládat stejný unikátní klíč, který už existuje, tak se nezobrazí chyba a ani k ní nedojde. Místo ní se jen insert vynechá. Příklad:

1
2
3
4
5
6
7
8
9
10
DECLARE @foo TABLE  (
	col INT NOT NULL PRIMARY KEY WITH (IGNORE_DUP_KEY = ON),
	col1 CHAR(1)
)
 
INSERT INTO @foo VALUES(1, 'a')
INSERT INTO @foo VALUES(2, 'b')
INSERT INTO @foo VALUES(1, 'c')
 
SELECT col, col1 FROM @foo

vrátí:

1
2
3
4
5
6
7
8
9
10
11
(1 row(s) affected)
 
(1 row(s) affected)
 
Duplicate key was ignored.
(0 row(s) affected)
 
col         col1
----------- ----
1           a
2           b
  • Share/Bookmark
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...