mysql索引的疑问
天蓬老师
天蓬老师 2017-04-17 16:30:35
[MySQL讨论组]
explain 
  select * 
  from t_warning 
  where 
    FIND_IN_SET('214',t_wuserid) 
    and FIND_IN_SET('214_0',t_wkstatus) 
    and ((t_wstatus=2 
    and unix_timestamp(t_wstarttime)<=1485313428 
    and unix_timestamp(t_wendtime)>=1485313428) 
    or t_wstatus=1 
    or (t_wstatus=3 and t_week=3)) 
    and  FIND_IN_SET('2',t_wtype) 
  order by t_createtime desc 
  limit 50;

这条语句牵扯到的 where 条件的字段都加上了索引,为什么索引还是没有起作用?如何改sql?这条sql感觉写的不好。

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(3)
高洛峰

FIND_IN_SET 是不会用到索引的呀,不知道索引类型是 FULL_TEXT 的是否能利用。

伊谢尔伦

你这条语句查询条件太复查,肯定是全表扫描,本人也不能写出使用你这种情况的sql语句。建议,先将数据取出,再在 程序里做过滤

PHP中文网

是否使用索引,mysql会感觉各个执行计划的整体进行判定,不是说查询条件中的字段有索引就一定会用。

具体到你提到的sql语句,需要针对数据和and的各个条进行分析,是否存在能够大量过滤数据的条件(一般情况符合条件的记录要小于表总记录数的10%),然后针对这个条件的字段创建索引。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号