sql >> Database >  >> RDS >> Mysql

Waarom optimaliseert MySql de TUSSEN-query niet automatisch?

Zo'n vergelijking is niet logisch, aangezien je appels met peren vergelijkt.

Deze twee zoekopdrachten zijn niet gelijkwaardig, ze geven verschillende resultaten,
dus optimaliseert MySql ze op een andere manier en hun plannen kunnen verschillen.

Zie dit eenvoudige voorbeeld:http:/ /sqlfiddle.com/#!9/98678/2

create table account_range(
  is_active int,
  range_start int,
  range_end int
 );

 insert into account_range values
 (1,-20,100), (1,10,30);

Eerste zoekopdracht geeft 2 rijen:

select * from account_range
 where is_active = 1 and 25 between range_start AND range_end;

| is_active | range_start | range_end |
|-----------|-------------|-----------|
|         1 |         -20 |       100 |
|         1 |          10 |        30 |

Tweede zoekopdracht geeft slechts 1 rij:

SELECT * FROM account_range
WHERE
    is_active = 1 AND 
    range_start = (SELECT MAX(range_start)
                   FROM account_range
                   WHERE range_start <= 25
    ) AND 
    range_end = (SELECT MIN(range_end)
                 FROM account_range
                 WHERE range_end >= 25
    )

| is_active | range_start | range_end |
|-----------|-------------|-----------|
|         1 |          10 |        30 |

Om deze zoekopdracht te versnellen (de eerste), kunnen twee bitmapindexen worden gebruikt samen met de "bitmap en"-bewerking - maar MySql heeft zo'n functie niet.

Een andere optie is een ruimtelijke index ( bijvoorbeeld GIN-indexen in PostgreSql:http://www.postgresql. org/docs/current/static/textsearch-indexes.html ).

En een andere optie is een stertransformatie (of een sterschema) - u moet deze tabel "verdelen" in twee "dimensie"- of "metingen"-tabellen en één "feiten"-tabel .. .. maar dit is een te breed onderwerp, als je meer wilt weten kun je hier beginnen:https:/ /en.wikipedia.org/wiki/Star_schema



  1. afbeelding ophalen van mysql php

  2. MySQL veel-op-veel relatie met FOREIGN KEYS

  3. Hoe voorwaarde-statements door te geven aan een mySql-query

  4. Netherlands Access Developer Day 2019 – 14 september