{"id":31,"date":"2008-01-09T13:41:04","date_gmt":"2008-01-09T12:41:04","guid":{"rendered":"http:\/\/blog.till.de\/2008\/01\/09\/indizes\/"},"modified":"2016-04-07T11:26:14","modified_gmt":"2016-04-07T09:26:14","slug":"indizes","status":"publish","type":"post","link":"https:\/\/blog.till.de\/allgemein\/indizes\/","title":{"rendered":"Indizes"},"content":{"rendered":"

Das man gerade f\u00fcr gr\u00f6\u00dfere Tabellen in der Datenbank m\u00f6glichst Indizes setzen sollte, um Datens\u00e4tze schneller zu finden und somit die Abfragezeit zu reduzieren d\u00fcrfte den meisten Entwicklern bekannt sein. Weniger bekannt ist jedoch, dass bei einer Abfrage je Tabelle immer nur ein einziger Index verwendet wird.<\/p>\n

Wenn es mehrere Indizes f\u00fcr eine Tabelle gibt versucht MySQL den besten zu bestimmen, kann damit aber auch \u00fcberfordert sein. Um zu pr\u00fcfen, welcher Index f\u00fcr die Abfrage genutzt wird kann man sich durch ein vorangestelltes EXPLAIN<\/em> Informationen zu der Abfrage anzeigen lassen.<\/p>\n

EXPLAIN SELECT * FROM tabelle WHERE feldA=\"Ja\" OR feldB=\"Nein\"<\/code><\/p>\n

MySQL gibt dann in dem Feld possible_keys<\/em> die Indizes an, die f\u00fcr die Abfrage in Frage kommen und in dem Feld key<\/em> den Index, den MySQL aktuell f\u00fcr die Abfrage verwenden w\u00fcrde. Es kann nat\u00fcrlich auch sein, dass key NULL<\/em> ist, was meist ein Zeichen daf\u00fcr ist, dass die m\u00f6glichen Indizes die Ergebnismenge nicht weit genug einschr\u00e4nken und es dann nach Meinung von MySQL schneller geht einfach nur den gesamten Datenbestand zu durchsuchen.<\/p>\n

Da man als Entwickler meist (wenn auch nicht immer) eine recht genau Vorstellung davon hat, wie die Tabelle aufgebaut ist und welche Daten sie enth\u00e4lt, kann es nat\u00fcrlich sein, dass man wei\u00df (oder es testen m\u00f6chte), dass ein anderer Index besser funktioniert. MySQL stellt dazu die Hints USE<\/em>, IGNORE<\/em> und FORCE INDEX<\/em> bereit. Mit USE<\/em> kann man eine Liste der possible_keys<\/em> angeben, IGNORE<\/em> schlie\u00dft Indizes explizit aus und FORCE<\/em> zwingt MySQL dazu f\u00fcr die Abfrage den angegebenen Index zu verwenden.<\/p>\n

Im folgenden Beispiel w\u00fcrde MySQL also gezwungen den IndexC zu benutzen, egal was es sonst selbt ermitteln w\u00fcrde.<\/p>\n

EXPLAIN SELECT * FROM tabelle FORCE INDEX( IndexC ) WHERE feldA=\"Ja\" OR feldB=\"Nein\"<\/code><\/p>\n","protected":false},"excerpt":{"rendered":"

Das man gerade f\u00fcr gr\u00f6\u00dfere Tabellen in der Datenbank m\u00f6glichst Indizes setzen sollte, um Datens\u00e4tze schneller zu finden und somit die Abfragezeit zu reduzieren d\u00fcrfte den meisten Entwicklern bekannt sein. Weniger bekannt ist jedoch, dass bei einer Abfrage je Tabelle immer nur ein einziger Index verwendet wird.<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"","_seopress_titles_title":"","_seopress_titles_desc":"","_seopress_robots_index":"","neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","neve_meta_reading_time":"","_themeisle_gutenberg_block_has_review":false,"_ti_tpc_template_sync":false,"_ti_tpc_template_id":"","footnotes":""},"categories":[1],"tags":[25,24],"_links":{"self":[{"href":"https:\/\/blog.till.de\/wp-json\/wp\/v2\/posts\/31"}],"collection":[{"href":"https:\/\/blog.till.de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.till.de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.till.de\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.till.de\/wp-json\/wp\/v2\/comments?post=31"}],"version-history":[{"count":0,"href":"https:\/\/blog.till.de\/wp-json\/wp\/v2\/posts\/31\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.till.de\/wp-json\/wp\/v2\/media?parent=31"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.till.de\/wp-json\/wp\/v2\/categories?post=31"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.till.de\/wp-json\/wp\/v2\/tags?post=31"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}