mysql连表查询关联字段类型不一致导致索引不生效

案发sql

SELECT
	a.user_id,
	a.user_name AS NAME,
	a.developer_name,
	c.mobile,
	DATE_FORMAT( b.audit_time, "%Y-%m-%d" ) AS date,
	datediff( now( ), b.audit_time ) AS days 
FROM
	`b2b_user`.`uuc_user_developer_certification` `a`
	LEFT JOIN `b2b_user`.`uuc_user_developer_certification_audit` `b` ON a.uid = b.certification_id
	LEFT JOIN `b2b_user`.`uuc_user_account` `c` ON cast( a.user_id AS CHAR(40)) = c.user_id 
WHERE
	( ( a.developer_name NOT LIKE "test%" ) AND ( b.audit_state = 2 ) ) 
	AND ( b.audit_time < "2020-08-10 00:00:00" )

其中a.user_idint(10),而相关联的c.user_idvarchar(40),两个表的CHARSET都是utf8
EXPLAIN后的执行计划发现c表并没有用到索引

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果您在 MySQL 数据库中为字段添加了索引,但索引似乎没有生效,可以尝试以下几个步骤来解决问题: 1. 确认索引是否正确创建:使用 `SHOW INDEX FROM table_name` 命令来检查索引是否已正确创建。确保索引的列名、名和索引类型都是正确的。 2. 确认索引选择是否合适:MySQL 使用不同类型索引,如 B-Tree 索引、哈希索引等。对于不同的查询类型,选择合适的索引类型是至关重要的。确保您选择的索引类型适用于您的查询需求。 3. 确认查询是否使用索引:有时,即使索引已正确创建,但查询可能仍未使用它。您可以使用 `EXPLAIN SELECT` 命令来查看查询计划,并确认是否使用了正确的索引。如果查询计划中没有索引或使用了错误的索引,您可能需要重新编写查询或添加提示(hint)来强制使用正确的索引。 4. 确认数据分布是否均匀:如果索引列中的数据分布不均匀,即某些值出现频率很高,而其他值则很少出现,那么索引可能无法发挥作用。在这种情况下,您可以考虑使用更适合数据分布的索引策略,如前缀索引、组合索引等。 5. 确认是否存在查询优化问题:有时,查询本身可能存在性能问题,即使索引已正确使用。您可以通过检查查询语句、结构和索引设计来确定是否有优化的空间。可能需要重新编写查询、调整结构或者添加额外的索引来提高性能。 如果上述步骤都没有解决您的问题,您可能需要进一步分析数据库的配置、硬件资源以及其他因素,以找出导致索引生效的原因。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值