Eine View ist eine SQL SELECT
-Abfrage mit einem Namen.
Quelle: Views-MySQL (S. 3)
SELECT
-Statements, nicht der darin enthaltenen Daten!Quelle: Views-MySQL (S. 4-5, 9)
CREATE VIEW SoftwareVerkaeufe AS
SELECT v.kaeufer, v.verkaeufer
FROM produkte p, verkaeufe v
WHERE p.produkt_id = v.produkt_id
AND p.produkt = "Software"
Quelle: https://de.wikipedia.org/wiki/Sicht_(Datenbank)
Der Algorithmus bestimmt, wie MySQL eine Ansicht verarbeitet, und kann einen der drei Werte MERGE
, TEMPTABLE
und UNDEFINE
annehmen.
CREATE ALGORITHM=MERGE VIEW SoftwareVerkaeufe AS
SELECT v.kaeufer, v.verkaeufer
FROM produkte p, verkaeufe v
WHERE p.produkt_id = v.produkt_id
AND p.produkt = "Software"
Quelle: Views-MySQL (S. 18)
SELECT
-Anweisung in der Ansichtsdefinition zu einer einzigen Abfrage zusammen.CREATE ALGORTIHM=MERGE VIEW contactPersons(customerName, firstName, lastName, phone) AS SELECT customerName, contactFirstName, contactLastName, phone FROM customers;
/* you execute */
SELECT * FROM contactPersons WHERE customerName LIKE '%Co%';
/* mysql executes */
SELECT customerName, contactFirstName, contactLastName, phone FROM customers WHERE customerName LIKE '%Co%';
SELECT
-Anweisung in der Ansichtsdefinition zu speichern.MERGE
gegenüber TEMPTABLE
, da MERGE
oft effizienter ist als TEMPTABLE
.Quelle: Views-MySQL (S. 19-22)
ALTER VIEW
ändert die Definition einer vorhandenen Ansicht.ALTER ALGORITHM=MERGE VIEW salesOrders AS
SELECT orderNumber, customerNumber, productCode, quantityOrdered, priceEach, status
FROM orders
INNER JOIN orderDetails USING (oderNumber);
INSERT
- oder UPDATE
-Anweisung zum Einfügen oder Aktualisieren von Zeilen der Basistabelle über die aktualisierbare Ansicht.SELECT
-Anweisung, die die Ansicht definiert, darf keines der folgenden Elemente enthalten:
MIN
, MAX
, SUM
, AVG
, COUNT
, DISTINCT
, GROUP BY
, HAVING
, UNION
, Joins, Subqueries, keine nicht-updatable View, …/* erstellen der view */
CREATE VIEW officeInfo AS SELECT officeCode, phone, city FROM offices;
/* beispiel: editieren einer tupel */
UPDATE officeInfo SET phone = '+33 14 723 5555' WHERE officeCode = 4;
Quelle: Views-MySQL (S. 24-26)
WITH CHECK OPTION
verhindert, dass eine View Zeilen aktualisiert oder einfügt, die durch sie nicht sichtbar sind.CREATE OR REPLACE VIEW dummy AS SELECT ... WHERE name LIKE ‘%ei%’;
INSERT INTO dummy(name, ...) VALUES ('Wurst', ..);
/* nun würde die tupel hinzugefügt werden */
CREATE OR REPLACE VIEW dummy AS SELECT ... WHERE name LIKE ‘%ei%’ WITH CHECK OPTION;
INSERT INTO dummy(name, ...) VALUES ('Wurst', ..);
/* nun würde die tupel nicht hinzugefügt werden -> error */
Quelle: Views-MySQL (S. 29-30)
Quelle: Index-MySQL (S. 2)
/* Festlegen eines Index beim Erstellen der Tabelle */
CREATE TABLE t (
c1 INT PRIMARY KEY,
c2 INT NOT NULL,
c3 INT NOT NULL,
c4 VARCHAR(10),
INDEX (c2, c3)
);
/* Nach der Erstellung der Tabelle einen Index definieren */
CREATE INDEX idx_c4 ON t(c4);
Quelle: Index-MySQL (S. 4)
CREATE TABLE table_name (
c1 data_type PRIMARY KEY,
c2 data_type,
c3 data_type,
c4 data_type,
INDEX index_name (c2,c3,c4)
);
CREATE INDEX index_name ON table_name (c2, c3, c4);´
Funktioniert für Abfragen
WHERE c2 = v2
)WHERE c2=v2 AND c3=v3
)WHERE c2=v2 AND c3=v3 AND c4=v4
)Quelle: Index-MySQL (S. 19-21)
CREATE INDEX index_name ON table_name(c1,c2,...) INVISIBLE;
ALTER TABLE table_name ALTER INDEX index_name [VISIBLE | INVISIBLE];
/* Anzeigen aller Indizes */
SELECT index_name, is_visible
FROM information_schema.statistics
WHERE table_schema = ...
AND table_name = ...;
Quelle: Index-MySQL (S. 22-24)
CREATE TABLE t (
a INT NOT NULL,
b INT NOT NULL,
INDEX a_asc_b_asc (a ASC, b ASC),
INDEX a_asc_b_desc (a ASC, b DESC),
INDEX a_desc_b_asc (a DESC, b ASC)
);
EXPLAIN SELECT * FROM t ORDER BY a, b; -- use index a_asc_b_asc
Quelle: Index-MySQL (S. 25-29)
ANALYZE TABLE
aus, wenn die Tabellen sehr oft geändert wurden!USE INDEX
empfohlen werden.FORCE INDEX
festgelegt werden./* Use Index Hint */
SELECT select_list FROM table_name USE INDEX(index_list) WHERE condition;
/* Force Index */
SELECT * FROM table_name FORCE INDEX (index_list) WHERE condition;
Quelle: Index-MySQL (S. 30-33)