Mysql
 sql >> база данни >  >> RDS >> Mysql

Защо MySql не оптимизира автоматично МЕЖДУ заявка?

Такова сравнение няма смисъл, тъй като сравнявате ябълки с портокали.

Тези две заявки не са еквивалентни, дават различни резултати,
по този начин MySql ги оптимизира по различен начин и техните планове могат да се различават.

Вижте този прост пример: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);

Първата заявка дава 2 реда:

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 |

Втората заявка дава само 1 ред:

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 |

За да се ускори тази заявка (първата), два индекса на растерни изображения могат да се използват заедно с операция "bitmap и" - но MySql няма такава функция.

Друга опция е пространствен индекс ( например GIN индекси в PostgreSql:http://www.postgresql. org/docs/current/static/textsearch-indexes.html ).

И друга опция е звездна трансформация (или звездна схема) - трябва да "разделите" тази таблица на две таблици с "измерение" или "мерки" и една таблица с "факти". .. но това е твърде обширна тема, ако искате да знаете повече, можете да започнете от тук:https:/ /en.wikipedia.org/wiki/Star_schema



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Динамично изграждане на заявки в релсите

  2. Изберете най-често срещаната стойност от поле в MySQL

  3. Проблем с MySQL „КЪДЕ И“.

  4. Създайте система за бюлетин с PHP и MySQL

  5. Архивирайте потребителите на MySQL