Heim  >  Artikel  >  Datenbank  >  Was sind die Vorteile des MySQL-Union-Index? Die Bedeutung des gemeinsamen Index

Was sind die Vorteile des MySQL-Union-Index? Die Bedeutung des gemeinsamen Index

零下一度
零下一度Original
2017-05-08 14:58:376937Durchsuche

Welche Bedeutung hat die Erstellung eines „gemeinsamen Index“ in MySQL

Frage?
Was ist nötig, um einen „gemeinsamen Index“ zu erstellen? Was sind die praktischsten Vorteile? Wenn die Daten schneller abfragen werden sollen, wäre es dann nicht in Ordnung, einen einspaltigen Index zu haben? Warum gibt es einen „gemeinsamen Index“?

Vereinfacht ausgedrückt gibt es zwei Hauptgründe:

  • „Eins ist drei wert“. Wenn Sie einen zusammengesetzten Index aus (a, b, c) erstellen, entspricht dies tatsächlich dem Erstellen von drei Indizes (a), (a, b), (a, b, c), da jeder zusätzliche Index die Schreibvorgänge erhöht. Overhead und Speicherplatz-Overhead. Bei Tabellen mit großen Datenmengen ist das ein großer Overhead!

  • Abdeckungsindex. Dasselbe hat einen zusammengesetzten Index (a, b, c), wenn es die folgende SQL gibt: Wählen Sie a, b, c aus der Tabelle aus, wobei a=1 und b = 1. Dann kann MySQL Daten direkt durch Durchlaufen des Index abrufen, ohne die Tabelle zurückzugeben, wodurch viele zufällige E/A-Vorgänge reduziert werden. Die Reduzierung von E/A-Vorgängen, insbesondere zufälliger E/A, ist tatsächlich die wichtigste Optimierungsstrategie von DBA. Daher ist das Abdecken von Indizes in realen praktischen Anwendungen eine der wichtigsten Optimierungsmethoden zur Verbesserung der Leistung

  • Je mehr Indexspalten vorhanden sind, desto weniger Daten werden durch den Index herausgefiltert. Eine Tabelle mit 10 Millionen Daten hat die folgende SQL: Wählen Sie aus der Tabelle aus, wobei a = 1 und b = 2 und c = 3. Nehmen Sie an, dass jede Bedingung 10 % der Daten herausfiltern kann, wenn nur a vorhanden ist Einzelwertindex, dann Durch diesen Index können 1000W10%=100w Datenstücke herausgefiltert werden, und dann kann die Tabelle zurückgegeben werden, um die Daten zu finden, die mit b=2 und c=3 aus den 100w Datenstücken übereinstimmen , dann sortiert und dann Paging ; Wenn es sich um einen zusammengesetzten Index handelt, filtern Sie 1000w 10% 10% *10%=1w durch den Index und sortieren und paginieren Sie Welche Einer ist effizienter? Sie können es auf einen Blick erkennen

Die folgende Tabelle

enthält drei
create table test(
    a int,
    b int,
    c int,
);
Schlüssel

a, b, c. Wenn wir
viele Dinge wie select * from test where a=10, b>50, c>20
Kombinierte Abfrage ausführen müssen, müssen wir möglicherweise einen gemeinsamen Index mit [a, b, c] und einen separaten Index erstellen auf [a][b][c] ist nicht genug. (Sie können sich einen Index als eine sortierteed-Liste vorstellen.) Das Erstellen eines Index von (a, b, c) entspricht dem Sortieren von a, b, c (die Sortierregel lautet

  if(X.a>Y.a)
    return '>';
  else if(X.a<Y.a)
    return &#39;<&#39;;
   else if(X.b>Y.b)
    return &#39;>&#39;;
   else if (X.b<Y.b)
    return &#39;<&#39;;
   else if (X.c>Y.c)
    return  &#39;>&#39;
   else if (X.c<Y.c)
    return  &#39;<&#39;
   esle
    return &#39;==&#39;
)
Es unterscheidet sich von der Sortierung nach a, der Sortierung nach b bzw. der Sortierung nach c.

Die Reihenfolge von a b c ist ebenfalls wichtig, manchmal kann es a c b oder b c a usw. sein. Wenn Sie erstellen (a, der gemeinsame Index von b, c), die Abfrageeffizienz ist wie folgt:


Das Folgende wird grafisch dargestellt
  优: select * from test where a=10 and b>50
  差: select * from test where a>50

  优: select * from test order by a
  差: select * from test order by b
  差: select * from test order by c

  优: select * from test where a=10 order by a
  优: select * from test where a=10 order by b
  差: select * from test where a=10 order by c

  优: select * from test where a>10 order by a
  差: select * from test where a>10 order by b
  差: select * from test where a>10 order by c

  优: select * from test where a=10 and b=10 order by a
  优: select * from test where a=10 and b=10 order by b
  优: select * from test where a=10 and b=10 order by c

  优: select * from test where a=10 and b=10 order by a
  优: select * from test where a=10 and b>10 order by b
  差: select * from test where a=10 and b>10 order by c


Drei Hinweise

Wenn die Spalte in MySQL vom Typ varchar ist, verwenden Sie bitte nicht den Typ int, um wie folgt auf

zuzugreifen

Die Produkt-ID in der Tabelle zz_deals ist vom Typ varchar

Werbe-Slogan
mysql> explain select * from zz_deals where  qq_shop_id = 64230 and product_id = &#39;38605906667&#39; ;+----+-------------+-------------+------+------------------------------+------------------------------+---------+-------------+------+-------------+| id | select_type | table       | type | possible_keys                | key                          | key_len | ref         | rows | Extra       |+----+-------------+-------------+------+------------------------------+------------------------------+---------+-------------+------+-------------+|  1 | SIMPLE      | zz_deals | ref  | by_product_id_and_qq_shop_id | by_product_id_and_qq_shop_id | 156     | const,const |    1 | Using where |+----+-------------+-------------+------+------------------------------+------------------------------+---------+-------------+------+-------------+1 row in set (0.00 sec)
mysql> explain select * from zz_deals where  qq_shop_id = 64230 and product_id = 38605906667 ;+----+-------------+-------------+------+------------------------------+------+---------+------+------+-------------+| id | select_type | table       | type | possible_keys                | key  | key_len | ref  | rows | Extra       |+----+-------------+-------------+------+------------------------------+------+---------+------+------+-------------+|  1 | SIMPLE      | zz_deals | ALL  | by_product_id_and_qq_shop_id | NULL | NULL    | NULL |   17 | Using where |+----+-------------+-------------+------+------------------------------+------+---------+------+------+-------------+1 row in set (0.00 sec)

Nach zweieinhalb Monaten Vorbereitung, drei großen Überarbeitungen und siebzehn kleineren Überarbeitungen ist le1024 endlich bereit, Sie kennenzulernen

le1024 empfiehlt jeden Tag 1–3 interessante, liebevolle und erzählende Videos 🎜>

[Verwandte Empfehlungen]Kostenloses MySQL-Online-Video-Tutorial

2. Neuestes MySQL-Handbuch-Tutorial

3.

Datenbankdesign dieser Dinge

Das obige ist der detaillierte Inhalt vonWas sind die Vorteile des MySQL-Union-Index? Die Bedeutung des gemeinsamen Index. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn