exportuje index mysqldump ve výchozím nastavení?
<p>trochu jsem si hrál s mysqldump a přemýšlel jsem, jestli to ve výchozím nastavení exportuje indexy (<code>fulltext</code>, <code>index</code>, ...). já <a href="http://dev.mysql.com/doc/refman/5.0/en/mysqldump.html">přečtěte si to</a> a našel jsem <a href="http://dev.mysql.com/doc/refman/5.0/en/mysqldump.html#option\_mysqldump\_disable-keys">tato možnost</a> :</p><pre><code>--disable-keys, -k </code></pre><p>což naznačuje, že skutečně indexy exportuje. ale nechci věřit své interpretaci a chci se ujistit, že to mám pravdu (nebo špatně ;-)). může to někdo potvrdit?</p>
<p>ne, neexportuje indexy. indexy se znovu vytvoří po načtení mysqldump zpět do mysql. možnosti, které jste našli „--disable-keys“, způsobí, že mysqldump něco napíše před načtením tabulky pomocí inserts:</p><pre><code>drop table if exists `tblaccountlinks`; set @saved\_cs\_client = @@character\_set\_client; set character\_set\_client = utf8; create table `tblaccountlinks` ( `id` int(11) not null auto\_increment, `firmno` varchar(10) not null, `customerno` varchar(20) not null, `accountno` varchar(20) not null, `linktype` smallint(6) not null, `accesslevel` smallint(6) not null, `status` smallint(6) not null, `createdon` datetime not null, primary key (`id`) ) engine=innodb auto\_increment=27023 default charset=latin1; set character\_set\_client = @saved\_cs\_client; -- -- dumping data for table `tblaccountlinks` -- lock tables `tblaccountlinks` write; /*!40000 alter table `tblaccountlinks` disable keys */; insert into `tblaccountlinks` values (1,'f0001','c001','t00000001',1,2,1,'2008-06-30 07:55:43'),(2,' f0001','c001','t00000002',2,2,1,'2008-06-30 07:55:43'),(3,'f0001','c002','27601012',1,2,1,'2008-06-3 ... </code></pre><p>řádek za lock tables je</p><pre><code>/*!40000 alter table `tblaccountlinks` disable keys */; </code></pre><p>to je to, co volba --disable-keys vloží do mysqldump.</p><p>také je to vloženo po dokončení všech vložek</p><pre><code>/*!40000 alter table `tblaccountlinks` enable keys */; unlock tables; </code></pre><p>caveat # 1</p><blockquote> <p>disable keys a enable keys byly implementovány tak, aby zakázaly opakované načítání nonunique indexů, zatímco se obnovuje tabulka. primární klíče a jedinečné klíče nejsou deaktivovány. jsou načteny ve stejnou chvíli, ve které jsou vložky. jakmile enable keys, nonunique indexy jsou znovu sestaveny tříděním (nebo pomocí mezipaměti myisam není dostatek dostupné paměti)</p> <p>bohužel funkce disable keys a enable keys funguje pouze pro tabulky myisam, ne pro innodb.</p> </blockquote><p>caveat # 2</p><p>nemusíte --disable-keys. mohli byste je zakázat zakázat keys (není určena žádná hříčka) pomocí --skip-disable-keys:</p><pre><code> -k, --disable-keys '/*!40000 alter table tb\_name disable keys */; and '/*!40000 alter table tb\_name enable keys */; will be put in the output. (defaults to on; use --skip-disable-keys to disable.) </code></pre><p>to by mohlo mít za následek pomalejší načtení a potenciální posunutí indexových stránek pro neunikové indexy.</p><p>caveat # 3</p><p>můžete vypsat skutečné tabulkové prostory innodb (mysql 5.5.12)</p><pre><code> -y, --all-tablespaces dump all the tablespaces. -y, --no-tablespaces do not dump any tablespace information. </code></pre>
[`IGNORE_SPACE`](http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html#sqlmode_ignore_space)Režim umožňuje mezery mezi názvy funkcí a následující závorkách. Pokud je to povoleno, všechny názvy funkcí se stal vyhrazená slova, protože to stane se nemožné pro MySQL, zda voláte funkce nebo deklarovat (s použitím) identifikátor.


Proto, pokud je to povoleno, vaše `CREATE TABLE`selže a následující:



```
SELECT MD5 (some_column) FROM some_table

```

bude pracovat. Pokud `IGNORE_SPACE`je vypnuta, opak stane ( `CREATE TABLE`bude fungovat a především `SELECT`nebude, protože tam je mezera mezi názvu funkce a závorce). je treba vyexportovat na pozadovany format V nastavení - pokročilé volby - stahování, musíš mít zaškrtnuto "otevřít pomocí zásuvného modulu". Neexistuje žádný dobrý důvod vzdát zjevné indexy (FKS, atd), při vytváření tabulky. To se nikdy výrazně ovlivnit výkon na to, aby nepotřebné indexy malých tabulek, a to je dobré, aby se první řez, když je vaše mysl v souvislosti s návrhem schématu. Také některé indexy slouží k zabránění duplicity, které mohou být užitečné bez ohledu na velikost tabulky.


Myslím, že správná odpověď na vaši otázku je, že počet záznamů v tabulce by měl mít nic společného s tím, když se vytvořit indexy. Máš v php povolený načítání modulů, který jsou potřeba? Indexace ve Windows je inteligentni a reaguje na ZMENU (pribyde soubor, zmeni se soubor, smaze se soubor). Takze disk se musi stejne "roztocit" aby zmenu zapsal.Jinak je zatizeni indexaci znat jen pri reindexaci celeho rozsahu (napr. po pridani ifiltru, restore bambilionu souboru a pod).Osobne povazuj indexaci ve Win za velmi dobrou od Win XP a vyuzivam ji, dale na ni zaviseji nektere programy - typicky MS Outlook ... Jen doporucuji naucit se advanced query syntax: [https://docs.microsoft.com/en-us/windows/win32/lwef/...](https://docs.microsoft.com/en-us/windows/win32/lwef/-search-2x-wds-aqsreference?redirectedfrom=MSDN)  MP teda já používam WMP a tam to normálně je <p>pravděpodobně se dostáváte do radostí mysql myisam engine ...</p><p>v rámci mysql (nebo phpmyadmin) použijte příkazy repair table xyz znovu, opakovaně, na každé z vašich tabulek (nebo spíše tabulek souvisejících s vašimi podmínkami, protože to jsou ty, které znějí zkaženě), aby se zjistilo, zda to nic nevyřeší.</p><p>pokud selžou, existuje několik zdokumentovaných řešení:</p><p> <a href="http://www.google.com/search?q=recover+a+corrupt+mysql+database">http://www.google.com/search?q=recover+a+corrupt+mysql+database</a> </p><p>jakmile jsou věci obnoveny, spusťte příkazy optimalizovat tabulku xyz na každé tabulce a poté změňte motor databáze a každou tabulku, aby byla použita innodb. innodb poněkud neuspořádá katalog (zejména pokud upustíte databázi nebo velké tabulky), ale - pokud je kompatibilní s acid - je to o dost méně náchylné k chybám než myisam.</p> Vím, že tato odpověď je trochu pozdě, ale já jsem prostě zvedl na MvcSitemap sám v posledním týdnu a používám ho jako na otázku OP je ve svém vlastním projektu.


Je to určitě dosažitelné. Můžete definovat sitemap uzly vytvořením zprostředkovatele uzel vlastní, ve které procházejí v hodnotách trasy pro každý uzel, na základě vlastní cestou jste se zmínil. Dokonce verze 1 MvcSiteMap umožnila dynamické uzly, ale v2.0 zdá mnohem pružnější - a podporuje MVC2 oblastí.


Podívejte se na [projektové wiki](https://github.com/maartenba/MvcSiteMapProvider/wiki) vstupu na [definování sitemap uzly v kódu](https://github.com/maartenba/MvcSiteMapProvider/wiki/Defining-sitemap-nodes-in-code) . Projekt vzorek příliš dobré. Pokud máte pouze nainstalován SQL Express, budete muset chytit soubory DB z původního MVCMusicStore projektu jako soubory DB součástí ukázkové MvcSiteMap bude pracovat pouze na placené verze SQL serveru. Ignoruje všechny používá související non-SQL z LINQ a právě s ohledem na LINQ-to-SQL.


LINQ dotazy jsou objekty, které si zachovávají dotazu *definici* a ekvivalentní SQL je instanci pouze v okamžiku dotazu je vlastně opakována. Který umožňuje komponenty musí být řádně odděleny a umožňují **zpracování ve stylu potrubí** , kde jsou dotazy vrácené spodních vrstev (např. Podle údajů) a transformovány vyššími složkami v zásobníku. Dotaz může přizpůsobit nové filtry, se připojí a další ‚artefakty‘ z každé složky ve zpracovatelském potrubí, dokud nedosáhne konečného formulář, který je případně opakována. Tato manipulace je prakticky nemožné pomocí rovné textu SQL.


Další výhodou je, že LINQ jeho syntaxe je snazší pochopit vývojářům non-databáze. SQL syntax odbornost je překvapivě těžké najít aktivum. Několik vývojáři jsou ochotni trávit čas učení jemnější body SQL mimo `SELECT * FROM ... WHERE ...`. Syntaxe LINQ je blíže ke každodenním prostředí .NET a využívá stávající dovednost nastavit v této vrstvě (např. Výrazy lambda) v protikladu k vynucení vývojář naučit správné SQL pro cílené zadní konce (T-SQL, PL-SQL atd). Vzhledem k tomu, že výraz LINQ vyjadřuje požadovaný výsledek do značné míry přímo do relační algebře, poskytovatelé mají mnohem snazší práci do generuje odpovídající SQL (nebo dokonce vytvářet přímou plán provádění!). Srovnejte to s nemožný úkol ‚generické‘ databázové řidiči museli čelit vzácně s textem SQL. Pamatovat ODBC syntaxe escape, někdo?