其他
面试官:什么是前缀索引、为什么要用前缀使用、用在什么场景下?
# 什么是前缀索引?
# 为什么要用前缀索引?
# 什么情况下适合使用前缀索引?
可以只索引列开始的部分字符串 节约索引空间 从而提高索引效率
// 创建一个测试表
CREATE TABLE `x_test` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`x_name` varchar(255) NOT NULL,
`x_time` int(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4145025 DEFAULT CHARSET=utf8mb4
// 添加200万条测试数据
INSERT INTO x_test(x_name,x_time) SELECT CONCAT(rand()*3300102,x_name),x_time FROM x_test WHERE id < 30000;
1.在无任何索引的情况下随便查询一条
SELECT * FROM x_test WHERE x_name = '1892008.205824857823401.800099203178258.8904820949682635656.62526521254';
2.添加前缀索引 ( 以第一位字符创建前缀索引 )
alter table x_test add index(x_name(1))
SELECT * FROM x_test WHERE x_name = '1892008.205824857823401.800099203178258.8904820949682635656.62526521254';
3.重新建立前缀索引 这次以前4位字符来创建
alter table x_test add index(x_name(4));
SELECT * FROM x_test WHERE x_name = '1892008.205824857823401.800099203178258.8904820949682635656.62526521254';
4.200万条数据都以数字开头 而0-9排列组合7位则可达到千万种组合
alter table x_test add index(x_name(7));
SELECT * FROM x_test WHERE x_name = '1892008.205824857823401.800099203178258.8904820949682635656.62526521254';
推荐阅读:
点个在看你最好看