医院网站优化方案外国人做中国数学视频网站
医院网站优化方案,外国人做中国数学视频网站,网站入口,wordpress 创建主题《数据库架构100讲》14.MySQL#xff0c;索引技巧《调试MySQL死锁必备#xff01;#xff08;第13讲#xff09;》中#xff0c;举了一个强制类型转换导致死锁的例子#xff0c;有朋友询问是不是类型转换都不能命中索引#xff0c;花1分钟细说一下。第一类#xff1a;“…《数据库架构100讲》14.MySQL索引技巧《调试MySQL死锁必备第13讲》中举了一个强制类型转换导致死锁的例子有朋友询问是不是类型转换都不能命中索引花1分钟细说一下。第一类“列类型”与“where值类型”不符不能命中索引会导致全表扫描(full table scan)。数据准备create table t1 (cell varchar(3) primary key)engineinnodb default charsetutf8;insert into t1(cell) values (111),(222),(333);1. cell属性为varchar类型2. cell为主键即聚簇索引(clustered index)3. t1插入3条测试数据测试语句explain select * from t1 where cell111;explain select * from t1 where cell111;1. 第一个语句where后的值类型是整数与表cell类型不符2. 第二个语句where后的值类型是字符串与表cell类型一致测试结果1. 强制类型转换不能命中索引需要全表扫描即3条记录2. 类型相同命中索引1条记录第二类相join的两个表的字符编码不同不能命中索引会导致笛卡尔积的循环计算nested loop。数据准备create table t2 (cell varchar(3) primary key)engineinnodb default charsetlatin1;insert into t2(cell) values (111),(222),(333),(444),(555),(666);create table t3 (cell varchar(3) primary key)engineinnodb default charsetutf8;insert into t3(cell) values (111),(222),(333),(444),(555),(666);1. t2和t1字符集不同插入6条测试数据2. t3和t1字符集相同也插入6条测试数据3. 除此之外t1t2t3表结构完全相同测试语句explain select * from t1,t2 where t1.cellt2.cell;explain select * from t1,t3 where t1.cellt3.cell;1. 第一个join连表t1和t2字符集不同关联属性是cell2. 第二个join连表t1和t3字符集相同关联属性是cell测试结果1. t1和t2字符集不同存储空间不同2. t1和t2相join时遍历了t1的所有记录3条t1的每一条记录又要遍历t2的所有记录6条实际进行了笛卡尔积循环计算(nested loop)索引无效3. t1和t3相join时遍历了t1的所有记录3条t1的每一条记录使用t3索引即扫描1行记录画外音图片请放大。总结两类隐蔽的不能利用索引的case1. 表列类型与where值类型不一致2. join表的字符编码不同知其然知其所以然。思路比结论更重要。全文完有架构合集吗《流量从10万到10亿80个架构问题》《关于即时通讯架构的一切》欢迎加入学习圈职场公共进步