在MySQL中,你可以通过多种方式强制查询使用特定的索引,这在优化查询性能时非常有用,特别是当查询优化器没有选择最佳索引时。
1 2 |
SELECT * FROM table_name FORCE INDEX (index_name) WHERE condition; |
1 2 3 |
-- 强制使用名为 idx_user_id 的索引 SELECT * FROM orders FORCE INDEX (idx_user_id) WHERE user_id = 100 AND order_date > '2023-01-01'; |
1 2 |
SELECT * FROM table_name USE INDEX (index_name) WHERE condition; |
1 2 3 |
-- 建议使用名为 idx_product_category 的索引 SELECT * FROM products USE INDEX (idx_product_category) WHERE category = 'Electronics' AND price < 1000; |
1 2 |
SELECT * FROM table_name IGNORE INDEX (index_name) WHERE condition; |
1 2 3 |
-- 忽略名为 idx_price 的索引 SELECT * FROM products IGNORE INDEX (idx_price) WHERE category = 'Electronics' AND price < 1000; |
1 2 |
SELECT * FROM table_name USE INDEX (index1, index2) WHERE condition; |
1 2 3 4 |
SELECT * FROM table1 FORCE INDEX (index_name) JOIN table2 FORCE INDEX (index_name) ON table1.id = table2.id; |
1 2 3 4 5 |
UPDATE table_name FORCE INDEX (index_name) SET column1 = value1 WHERE condition; DELETE FROM table_name FORCE INDEX (index_name) WHERE condition; |
1 2 3 4 5 |
-- 先分析原始查询 EXPLAIN SELECT * FROM orders WHERE user_id = 100 AND status = 'completed'; -- 如果发现没有使用理想的索引,再尝试强制使用 EXPLAIN SELECT * FROM orders FORCE INDEX (idx_user_status) WHERE user_id = 100 AND status = 'completed'; |