1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| CREATE TABLE orders ( id INT PRIMARY KEY AUTO_INCREMENT, user_id INT NOT NULL, status VARCHAR(20) NOT NULL, order_date DATE NOT NULL, amount DECIMAL(10,2) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
INSERT INTO orders (user_id, status, order_date, amount) VALUES (1, 'pending', '2023-09-01', 100.00), (2, 'completed', '2023-09-02', 200.00), (1, 'completed', '2023-09-03', 150.00), (3, 'pending', '2023-09-04', 300.00), (2, 'cancelled', '2023-09-05', 250.00);
CREATE INDEX idx_bad_1 ON orders(status); CREATE INDEX idx_bad_2 ON orders(user_id); CREATE INDEX idx_bad_3 ON orders(order_date);
CREATE INDEX idx_user_status_date ON orders(user_id, status, order_date);
EXPLAIN SELECT * FROM orders WHERE user_id = 1; EXPLAIN SELECT * FROM orders WHERE user_id = 1 AND status = 'completed'; EXPLAIN SELECT * FROM orders WHERE user_id = 1 AND status = 'completed' AND order_date = '2023-09-03';
EXPLAIN SELECT * FROM orders WHERE status = 'completed' AND order_date = '2023-09-03';
|