索引常见的几种失效情况
对于联合索引,没有遵循左前缀原则
索引的字段区分度不大,可能引起索引近乎全表扫描
对于join操作,索引字段的编码不一致,导致使用索引失效
对于hash索引,范围查询失效,hash索引只适合精确匹配
有索引,但操作索引项字段“·不干净” 加了函数或者各种骚操作
(对于sql执行耗时问题 最好使用explain和 profilings 查看执行计划详细信息)
对于innodb 或myisam,is null 走索引的情况 不走索引的情况?
is not null 对于索引字段设计不管允许为空或不许为null 都不走索引
is null 对于索引字段设计为可许为null时 走索引 ;如果字段设计不可null 则不走索引
条件中用or,即使其中有条件带索引,也不会使用索引查询(这就是查询尽量不要用or的原因,用in吧)
索引失效与优化
全值匹配
最佳左前缀法则(带头大哥不能死,中间兄弟不能少)
不在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描
存储引擎不能使用索引中范围条件右边的列
尽量使用覆盖索引(只访问索引的查询(索引列和查询列一直)),减少select *
mysql在使用不等于(!=或者<>)的时候无法使用索引会导致全表扫描
使用is null, is not null也无法使用索引
like以通配符开头(‘%abc…’)mysql索引失效会变成全表扫描的操作
字符串不加单引号索引失效
少用or,用它来连接时索引会失效
请说出sql语句中 left join ,inner join 和right join的区别
left join(左联接) :返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) :返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) :只返回两个表中联结字段相等的行
分库分表的问题如何实现分布式全局唯一ID
在分库分表的环境中,数据分布在不同的分片上,不能再借助数据库自增长特性直接生成,否则会造成不同分片上的数据表主键会重复。
Group By和Order By
GROUP BY 和 ORDER BY同时使用的方法及注意事项:
GROUP BY和ORDER BY同时存在的情况是,ORDER BY对GROUP BY后的结果再进行排序,所以ORDER BY后面的排序字段需要在SELECT里出现,ORDER BY 子句中的列必须包含在聚合函数或 GROUP BY 子句中


#测试转行##软件测试面试##软件测试工程师#
对于联合索引,没有遵循左前缀原则
索引的字段区分度不大,可能引起索引近乎全表扫描
对于join操作,索引字段的编码不一致,导致使用索引失效
对于hash索引,范围查询失效,hash索引只适合精确匹配
有索引,但操作索引项字段“·不干净” 加了函数或者各种骚操作
(对于sql执行耗时问题 最好使用explain和 profilings 查看执行计划详细信息)
对于innodb 或myisam,is null 走索引的情况 不走索引的情况?
is not null 对于索引字段设计不管允许为空或不许为null 都不走索引
is null 对于索引字段设计为可许为null时 走索引 ;如果字段设计不可null 则不走索引
条件中用or,即使其中有条件带索引,也不会使用索引查询(这就是查询尽量不要用or的原因,用in吧)
索引失效与优化
全值匹配
最佳左前缀法则(带头大哥不能死,中间兄弟不能少)
不在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描
存储引擎不能使用索引中范围条件右边的列
尽量使用覆盖索引(只访问索引的查询(索引列和查询列一直)),减少select *
mysql在使用不等于(!=或者<>)的时候无法使用索引会导致全表扫描
使用is null, is not null也无法使用索引
like以通配符开头(‘%abc…’)mysql索引失效会变成全表扫描的操作
字符串不加单引号索引失效
少用or,用它来连接时索引会失效
请说出sql语句中 left join ,inner join 和right join的区别
left join(左联接) :返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) :返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) :只返回两个表中联结字段相等的行
分库分表的问题如何实现分布式全局唯一ID
在分库分表的环境中,数据分布在不同的分片上,不能再借助数据库自增长特性直接生成,否则会造成不同分片上的数据表主键会重复。
Group By和Order By
GROUP BY 和 ORDER BY同时使用的方法及注意事项:
GROUP BY和ORDER BY同时存在的情况是,ORDER BY对GROUP BY后的结果再进行排序,所以ORDER BY后面的排序字段需要在SELECT里出现,ORDER BY 子句中的列必须包含在聚合函数或 GROUP BY 子句中


