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

Indexování pro stránkování sady klíčů v mysql

S tímto problémem jsem se již setkal. Zde je moje analýza.

  • Vyskytuje se v MySQL 5.7 a 8.0, ale zjevně ne ve starších verzích a ne v MariaDB.

  • "Řešení", které preferuji, je změnit indexy takto:

       INDEX(company_id)      -- DROP this
       INDEX(company_id, id)  -- ADD this
    

Ačkoli je 2sloupcový index teoreticky totožný s jednosloupcovým indexem pro InnoDB (za předpokladu id je PK`), zdá se, že Optimizer tuto skutečnost ignoruje v některých situacích .

Také bych rád explicitně přidal PK, když vidím potřebu . To signalizuje budoucím čtenářům schématu (včetně mě), že některý dotaz těží z připojení PK.

Ještě jsem nenašel případ, kdy by "index merge intersect" bylo rychlejší než ekvivalentní složený index.

Nerad používám indexové „nápovědy“ ze strachu, že se distribuce dat v budoucnu změní a moje „nápověda“ situaci zhorší.



  1. SQLSTATE[HY000]:Obecná chyba:1835 Chybně vytvořený komunikační paket na LARAVEL

  2. Udělení přístupu uživatele msdb k profilu pošty databáze v SQL Server (T-SQL)

  3. Nelze použít mysql_real_escape_string

  4. php/mysql s více dotazy