创建一个名为test_db的数据库,并在其中创建一个名为test_table的表。该表包含多个字段,并在某些字段上创建索引。
CREATE DATABASE IF NOT EXISTS test_db;
USE test_db;
CREATE TABLE IF NOT EXISTS test_table (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
age INT,
salary DECIMAL(10, 2),
created_at DATETIME,
INDEX idx_name(name),
INDEX idx_age(age),
INDEX idx_salary(salary),
INDEX idx_created_at(created_at)
);
INSERT INTO test_table (name, age, salary, created_at)
SELECT
CONCAT('Name', FLOOR(1 + RAND() * 10000)),
FLOOR(18 + RAND() * 50),
ROUND(RAND() * 100000, 2),
NOW() - INTERVAL FLOOR(RAND() * 3650) DAY
FROM
information_schema.COLUMNS
LIMIT 1000;
SHOW INDEX FROM test_table;
这个问题要分版本回答!!!版本不同可能会导致索引失效的场景也不同,直接给答案的都是耍流氓!!!
这个问题要分版本回答!!!版本不同可能会导致索引失效的场景也不同,直接给答案的都是耍流氓!!!
这个问题要分版本回答!!!版本不同可能会导致索引失效的场景也不同,直接给答案的都是耍流氓!!!
一、索引失效的场景
1、使用 LIKE 并且是左边带 %
EXPLAIN SELECT * FROM test_table WHERE name LIKE '%abc';
EXPLAIN SELECT * FROM test_table WHERE name LIKE 'abc%';
EXPLAIN SELECT * FROM test_table WHERE name LIKE '%abc%';
在MySQL 8中,这种查询通常不会使用索引,因为左边的%
使得索引无法按照字典序进行快速查找。