java吧 关注:1,191,441贴子:12,604,077

一个sql优化的问题

只看楼主收藏回复




表结构就是一个自增id主键索引,几个varchar2列,没有索引,一个text列;55W数据走全表查询,子查询的方式会快不少,这个是因为io的原因吗


IP属地:湖北1楼2024-05-15 22:02回复
    插眼


    IP属地:北京来自Android客户端2楼2024-05-15 22:44
    收起回复
      子查询快只是你的错觉,主键id走了索引才快。


      IP属地:广东来自Android客户端3楼2024-05-15 22:46
      回复
        没有排序,你的分页是无效的


        IP属地:河南来自Android客户端4楼2024-05-15 22:50
        回复
          建议先explain一下


          IP属地:广东来自Android客户端5楼2024-05-15 23:32
          回复
            数据脱敏一下啊


            IP属地:广东来自Android客户端6楼2024-05-16 00:20
            收起回复
              哥们你这什么数据啊怎么码都不打的


              IP属地:广东来自Android客户端7楼2024-05-16 00:54
              收起回复
                是不是数据库有缓存的原因啊


                IP属地:浙江来自Android客户端8楼2024-05-16 01:01
                回复
                  把两个sql语句, like内容不同试试?


                  IP属地:浙江来自Android客户端9楼2024-05-16 01:02
                  回复
                    你是问为什么快?还是说要怎么优化? 最方便的是加索引,要是txt字段可以加部分索引。关系型数据库老老实实加索引吧,不走索引再怎么优化也没有什么用的。总之就是先减小数据选择范围,之后命中索引


                    IP属地:上海来自iPhone客户端10楼2024-05-16 01:22
                    收起回复
                      为什么子查询看 只有一个原因 就是你的子查询中只查询了id 然后 in (ids) 再ids不大的情况会触发主键索引
                      如果你的表是递增表 like是被 禁止使用的 特别是 %x% 双边号
                      如果一定要使用like 使用右边号 x%


                      IP属地:湖北11楼2024-05-16 13:26
                      回复
                        后面我把 limit给去掉了,结果还是子查询id再select * 的方式会快一些;
                        这个写法是我以前工作中试出来,但不知道怎么解释,应该是和 * 里包括 text字段有关;
                        explain没什么好看的,两个sql主要过程是全文的like,不同的是子查询最后走了一个 id的索引


                        IP属地:湖北12楼2024-05-16 13:27
                        收起回复
                          该不会执行了2次同样sql命中查询缓存了所以觉得快吧


                          IP属地:广东13楼2024-05-16 14:57
                          回复
                            mysql5.7版本,默认不开启缓存,我查了配置也是未开启;
                            就算有缓存,我两个sql都是点了好几次得出的对比结果。。。


                            IP属地:湖北14楼2024-05-17 14:34
                            回复
                              其实也不一定是text字段,我给表增加了好多个varchar(50)字段,一行记录的内容比较大的情况下,用这样子查询一下,确实快一些


                              IP属地:湖北15楼2024-05-17 14:38
                              回复