首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SQL IN 一定走索引吗?

问题 问题要从之前的统计 店铺数关注人数说起 SELECT shop_id, count(user_Id) as attentionNumber FROM shop_attention WHERE shop_id...阿里云对这个SQL的检测报告时 扫描行数和返回行数比例超过了100 使用了groupby函数,注意检查groupby是否用到了索引 分析 首先可以确定的是,group by 的 shop_id字段肯定是建了索引的...关联查询/范围排序查询时都会使得扫描行数大于返回行数。一般这个比例要控制在10以下,否则可能会有性能问题。 题外话,我一直觉得mysql explain的展示字段不如mongo的直观。...那么就explain 一下了 实验1 SELECT shop_id, count(user_Id) as attentionNumber FROM shop_attention WHERE shop_id...SELECT shop_id, count(user_Id) as attentionNumber FROM shop_attention WHERE shop_id IN(1,2,3,4,5,6,7,8,9

2K30

那些年我们一起优化的SQL

并不一定, 当索引使用类型type为range时,都会出现using index condition。...(可以让sql走覆盖索引、非索引排序的情况下也可以促使Mysql使用更优的排序算法) select id from reserve where shop_id=1 and reserve_status...引擎层过滤后会将获取的数据暂存,服务层一条一条数据获取,获取时引擎层回表获得完成数据交给服务层,服务层判断是否匹配查询条件(非索引过滤),如果匹配会继续判断是否满足limit限制的条数。...* FROM shop t1,(select id from reserve limit 1000,100) t2 where t1.id=t2.id 另外,涉及到大数据量的处理,可以按照时间分割查询...排序字段一定要走索引,不走索引数据量大的情况即使select的字段很少也会很慢。 select比较少的字段不仅可以利用到覆盖索引提高速度。

60031
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    面试官:如何优化慢SQL?

    我们在应用开发的早期,数据量少,开发人员开发功能时更重视功能上的实现,随着生产数据的增长,很多 SQL 语句开始暴露出性能问题,对生产的影响也越来越大,有时可能这些有问题的 SQL 就是整个系统性能的瓶颈...* from t where a = 1 and b in (1, 2) order by c";如果走 idx1,那么是 type 为 range,如果走 idx2,那么 type 是 ref;当需要扫描的行数...案例 1:最左匹配 索引: KEY `idx_shopid_orderno` (`shop_id`,`order_no`) SQL 语句: select * from _t where orderno...3.6 案例 6:不等于、不包含不能用到索引的快速搜索 可以用到 ICP: select * from _order where shop_id=1 and order_status not in (1,2...) select * from _order where shop_id=1 and order_status !

    68420

    数据库知识:SQL优化10个经典案例场景实战

    正文 前言 在应用开发的早期,数据量少,开发人员开发功能时更重视功能上的实现,随着生产数据的增长,很多SQL语句开始暴露出性能问题,对生产的影响也越来越大,有时可能这些有问题的SQL...= 1 and b in (1, 2) order by c";如果走idx1,那么是type为range,如果走idx2,那么type是ref;当需要扫描的行数,使用idx2大约是idx1的5倍以上时...另一种是采用延迟关联的方式进行处理,减少SQL回表,但是要记得索引需要完全覆盖才有效果,SQL改动如下 select t1.* from _t t1, (select id from _t where...SQL语句 select * from _order where shop_id = 1 and created_at > '2021-01-01 00:00:00' and order_status...(可以用到ICP) select * from _order where shop_id=1 and order_status not in (1,2) select * from _order where

    1.7K60

    面试官问如何优化慢SQL?

    ---- 文章来源:https://c1n.cn/tEsnA 前言 在应用开发的早期,数据量少,开发人员开发功能时更重视功能上的实现,随着生产数据的增长,很多 SQL 语句开始暴露出性能问题,对生产的影响也越来越大...* from t where a = 1 and b in (1, 2) order by c";如果走 idx1,那么是 type 为 range,如果走 idx2,那么 type 是 ref;当需要扫描的行数...1:最左匹配 索引: KEY `idx_shopid_orderno` (`shop_id`,`order_no`) SQL 语句: select * from _t where orderno=''...| 案例 6:不等于、不包含不能用到索引的快速搜索 可以用到 ICP: select * from _order where shop_id=1 and order_status not in (1,2...) select * from _order where shop_id=1 and order_status !

    87550

    10个经典案例,聊聊如何优化慢 SQL

    大家好,我是小富~ 前言 在应用开发的早期,数据量少,开发人员开发功能时更重视功能上的实现,随着生产数据的增长,很多 SQL 语句开始暴露出性能问题,对生产的影响也越来越大,有时可能这些有问题的 SQL...* from t where a = 1 and b in (1, 2) order by c";如果走 idx1,那么是 type 为 range,如果走 idx2,那么 type 是 ref;当需要扫描的行数...1:最左匹配 索引: KEY `idx_shopid_orderno` (`shop_id`,`order_no`) SQL 语句: select * from _t where orderno='...| 案例 6:不等于、不包含不能用到索引的快速搜索 可以用到 ICP: select * from _order where shop_id=1 and order_status not in (1,2...) select * from _order where shop_id=1 and order_status !

    2.1K31

    SQL优化场景+案例

    (可以用到ICP) 案例7、优化器选择不使用索引的情况 案例8、复杂查询 案例9、asc和desc混用 案例10、大数据 资料 前言 在应用开发的早期,数据量少,开发人员开发功能时更重视功能上的实现,随着生产数据的增长...= 1 and b in (1, 2) order by c;如果走idx1,那么是type为range,如果走idx2,那么type是ref;当需要扫描的行数,使用idx2大约是idx1的5倍以上时,...KEY `idx_shopid_orderno` (`shop_id`,`order_no`) SQL语句 select * from _t where orderno='' 查询匹配从左往右匹配...`) SQL语句 SELECT * FROM _order WHERE shop_id = 1 AND created_at > '2021-01-01 00:00:00' AND...(可以用到ICP) select * from _order where shop_id=1 and order_status not in (1,2) select * from _order where

    51140

    SQL优化万能公式:5 大步骤 + 10 个案例

    前言 在应用开发的早期,数据量少,开发人员开发功能时更重视功能上的实现,随着生产数据的增长,很多SQL语句开始暴露出性能问题,对生产的影响也越来越大,有时可能这些有问题的SQL就是整个系统性能的瓶颈。...= 1 and b in (1, 2) order by c";如果走idx1,那么是type为range,如果走idx2,那么type是ref;当需要扫描的行数,使用idx2大约是idx1的5倍以上时...` (`shop_id`, `order_status`, `created_at`) SQL语句 select * from _order where shop_id = 1 and order_status...(可以用到ICP) select * from _order where shop_id=1 and order_status not in (1,2) select * from _order where...另外,如果你最近想跳槽的话,年前我花了2周时间收集了一波大厂面经,节后准备跳槽的可以点击这里领取! 推荐阅读 在外企工作真的爽吗? 在制造业大厂当程序员是什么感受? 怎么选?

    33130

    mysql调优哪些事儿

    Rows_sent: 表示 SQL 语句返回的行数。 Rows_examined: 表示查询过程中扫描的行数。如果 SQL 语句没有执行查询操作,则该值为 0。...16M 内存临时表的最大容量为tmp_table_size和max_heap_table_size值的最小值 当所需临时表的容量大于两者的最小值时,mysql就会使用硬盘临时表存放数据 Using where...是我们平时见的最多的,条件查询的时候,进行全表扫描 explain SELECT province,city,STATUS from account where province = '北京市'...,a是varchar类型 select * from table1 where a = 1 select * from table1 where a = '1' 对于varchar类型比较来说,a,b...,一种是没必要走索引,一部分就是没遵循B+树的构建好的排序结构 第一种, 比如字段重复量过多,或者数据量过少,执行优化器认为没必要走索引了,全表扫描会更快, 范围查询的时候,1w行数据,且是select

    48042

    场景+案例分析,SQL优化这么做就对了

    (可以用到ICP) 案例7、优化器选择不使用索引的情况 案例8、复杂查询 案例9、asc和desc混用 案例10、大数据 资料 前言 在应用开发的早期,数据量少,开发人员开发功能时更重视功能上的实现,随着生产数据的增长...= 1 and b in (1, 2) order by c;如果走idx1,那么是type为range,如果走idx2,那么type是ref;当需要扫描的行数,使用idx2大约是idx1的5倍以上时,...KEY `idx_shopid_orderno` (`shop_id`,`order_no`) SQL语句 select * from _t where orderno='' 查询匹配从左往右匹配...另一种是采用延迟关联的方式进行处理,减少SQL回表,但是要记得索引需要完全覆盖才有效果,SQL改动如下 SELECT t1.* FROM _t t1, ( SELECT id FROM _t WHERE...(可以用到ICP) select * from _order where shop_id=1 and order_status not in (1,2) select * from _order where

    41410

    MYSQL优化技巧:5 大步骤 + 10 个案例

    = 1 and b in (1, 2) order by c;如果走idx1,那么是type为range,如果走idx2,那么type是ref;当需要扫描的行数,使用idx2大约是idx1的5倍以上时,...`) SQL语句 select * from _t where orderno='' 查询匹配从左往右匹配,要使用order_no走索引,必须查询条件携带shop_id或者索引(shop_id,order_no...另一种是采用延迟关联的方式进行处理,减少SQL回表,但是要记得索引需要完全覆盖才有效果,SQL改动如下 SELECT t1.* FROM _t t1, ( SELECT id FROM _t WHERE...语句 SELECT * FROM _order WHERE shop_id = 1 AND created_at > '2021-01-01 00:00:00' AND order_status...(可以用到ICP) select * from _order where shop_id=1 and order_status not in (1,2) select * from _order where

    57920

    count(*)、count(1)和count(column)区别以及执行效率高低比较

    性能问题:   1、任何情况下 SELECT COUNT(*) FROM tablename 是最优选择;   2、尽量减少 SELECT COUNT(*) FROM tablename WHERE COL...= 'value' 这种查询;   3、杜绝 SELECT COUNT(COL) FROM tablename WHERE COL2 = 'value' 的出现。   ...如果表只有一个字段,count(*)最快。 count(1)跟count(主键)一样,只扫描主键。 count(*)跟count(非主键)一样,扫描整个表。...执行效率:   它们三个的效率如何呢?网上说的各有各的理,当表中存在索引和主键的时候(我还没接触过设计表时不设计主键的),三者效率差不多。...测试:   我用100万数据进行测试,发现当且仅当三者有主键时,他们的执行时间几乎相等。

    3K40

    【愚公系列】《网络安全应急管理与技术实践》 012-网络安全应急技术与实践(Web层-SQL注入)

    一、SOL注入攻击分析与应急演练1.SOL注入种类SQL注入攻击是通过将恶意的SQL代码注入到Web应用程序的输入字段中,以绕过应用程序的输入验证并直接访问和执行数据库的攻击方式。...如果在注入点处出现错误信息或页面内容的变化,且注入点处的数据可以影响响应信息的内容,那么很可能存在布尔型盲注。注入点位:在确定注入点时,可以通过手工测试或使用工具扫描程序来发现是否存在布尔型盲注。...错误信息:当攻击者进行盲注测试时,如果系统返回的错误信息与平时不同,可能存在时间型盲注。追踪日志:追踪数据库日志,查看是否有异常的查询和响应时间。...应用程序使用以下SQL查询语句进行验证:SELECT * FROM users WHERE username = '输入的用户名' AND password = '输入的密码';攻击者可以通过在用户名字段中注入恶意的...这里将关键词union中的u大写,当select、fom 和 where 每个关键词都有一个字母大写后就可以成功绕过限制)。

    17520

    SQL优化中新建索引真的比Explain好?面试官:你出去吧

    也就是说,基于非主键索引的查询需要多扫描一棵索引树。因此,我们在应用中应该尽量使用主键查询。...(image-417577-1609248374529)] 通过Explain关键字,可以看出来每个查询扫描的行数,用到了哪个索引等等,下面文章,会讲每个字段的意思,然后看下如何优化。。。。。。...ref ref:常见的有:const,func,null,字段名。 当使用常量等值查询,显示const。当关联查询时,会显示相应关联表的关联字段。...EXPLAIN SELECT shop_id FROM s_goods WHERE cat_id IN (1,2,3,4) GROUP BY shop_id; [图片上传失败......EXPLAIN SELECT * FROM s_goods ORDER BY shop_id; ? image.png Using join buffer:关联字段没有用到索引的话,会显示这个。

    52610

    新闻推荐实战(一):MySQL基础

    通过SELECT语句,可以从表中取出所要查看的字段的内容: SELECT 字段名>, …… FROM ; 如要直接查询表的全部字段: SELECT * FROM ; 其中,*...简单来理解: 例如做操时,老师将不同身高的同学进行分组,相同身高的同学会被分到同一组,分组后我们又统计了每个小组的学生数。 将这里的同学可以理解为表中的一行数据,身高理解为表的某一字段。...GROUP BY 当被聚合的键中,包含NULL时,在结果中会以“不确定”行(空行)的形式表现出来,也就是字段中为NULL的数据会被聚合为一组。...: FROM → WHERE → GROUP BY → SELECT 使用GROUP BY子句时,SELECT子句中不能出现聚合键之外的字段名。...永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。 不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。

    2.1K10
    领券