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
create table test( a int, b int, c int, );
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 '<'; else if(X.b>Y.b) return '>'; else if (X.b<Y.b) return '<'; else if (X.c>Y.c) return '>' else if (X.c<Y.c) return '<' esle return '==' )
优: 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
Die Produkt-ID in der Tabelle zz_deals ist vom Typ varchar
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 | 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)
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.
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!