sql >> Database teknologi >  >> RDS >> Mysql

Hvorfor optimerer MySql ikke automatisk MELLEM forespørgsel?

Sådan en sammenligning giver ikke mening, da du sammenligner æbler med appelsiner.

Disse to forespørgsler er ikke ensartede, de giver forskellige resultater,
MySql optimerer dem på en anden måde og deres planer kan variere.

Se dette enkle eksempel: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);

Første forespørgsel giver 2 rækker:

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 |

Anden forespørgsel giver kun 1 række:

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 |

For at fremskynde denne forespørgsel (den første), kan to bitmapindekser bruges sammen med "bitmap og" operation - men MySql har ikke sådan en funktion.

En anden mulighed er et rumligt indeks ( for eksempel GIN-indekser i PostgreSql:http://www.postgresql. org/docs/current/static/textsearch-indexes.html ).

Og en anden mulighed er en stjernetransformation (eller et stjerneskema) - du skal "dele" denne tabel i to "dimensions"- eller "mål"-tabeller og en "faktum"-tabel .. .. men dette er for bredt emne, hvis du vil vide mere kan du starte herfra:https:/ /en.wikipedia.org/wiki/Star_schema



  1. Hente data fra to tabeller med fremmednøgleforhold i Django?

  2. JSON_VALID() – Test for gyldig JSON i MySQL

  3. MySQL Type=MyISAM-fejl

  4. Håndtering af en MySQL-database i cPanel med PHPMyAdmin