sql >> Databáze >  >> RDS >> Mysql

MySQL přestane používat index, když jsou přidána další omezení

To je trochu obtížné vysvětlit.

Dotaz, který používá index, jej používá, protože index je "krycí" index. To znamená, že všechny sloupce v indexu jsou v dotazu. Jediná část indexu, která se skutečně používá efektivně, je podmínka na latitude .

Normálně by měl krycí index pouze sloupce uvedené v dotazu. Primární klíč se však používá k odkazování na záznamy, takže předpokládám, že users.Id je primární klíč na stole. A index se hledá na platné hodnoty latitude .

Dotaz, který nepoužívá index, jej nepoužívá ze dvou důvodů. Za prvé, podmínky na sloupcích jsou nerovnosti. Vyhledávání indexu může používat pouze podmínky rovnosti a jednu nerovnost. To znamená, že index lze použít pouze pro latitude ve své nejúčinnější metodě. Za druhé, další sloupce v dotazu vyžadují přechod na datovou stránku.

Jinými slovy, optimalizátor ve skutečnosti říká:"Proč se obtěžovat jít do indexu, prohledat index a pak skenovat datové stránky? Místo toho mohu jen skenovat datové stránky a získat vše najednou."

Vaše další otázka je nepochybně:"Ale jak mohu svůj dotaz zrychlit?" Můj návrh by byl prozkoumat prostorové indexy .




  1. SQL:Jak uložit objednávku v dotazu SQL?

  2. Server se automaticky zavírá a čelí chybě 'ERR_STREAM_WRITE_AFTER_END' spolu s odesíláním dat pokaždé klientovi

  3. Dotaz SUM pro dvě pole ve dvou různých tabulkách

  4. Jak povolit rozšíření pro oci8 (Oracle) v php.ini - PHP Upozornění:Spuštění PHP:v neznámém na řádku 0