背景有客户提出一个问题。 一个类似这样的SQL语句,select count(id) from 为什么执行计划用全表扫,不用索引。id列上有主键。分析test=# explain (analyze, buffers ) select count(id) from t1;
                                                   QUERY PLAN
--            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-07-05 10:42:03
                            
                                48阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            create table tb2 as select * from emp; 
alter table tb2 modify empno number(4) not null; 
翻到20W行 
create index idxtb21 on tb2(empno); 
select INDEX_NAME from dba_indexes where table_name='TB2';--验证ind            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-03-19 20:50:24
                            
                                318阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            # 如何实现“mysql SELECT count 不走索引”
## 引言
在MySQL中,查询语句的性能优化是非常重要的。当我们使用SELECT COUNT(*)语句时,如果不走索引,可能会导致查询变得非常慢。本文将介绍如何针对这个问题进行优化。
## 问题分析
要解决“mysql SELECT count 不走索引”的问题,首先我们需要了解查询语句的执行流程。下面是整个流程的步骤表格:            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2023-12-22 08:19:14
                            
                                179阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            1、检查被索引的列或组合索引的首列是否出现在PL/SQL语句的WHERE子句中,这是“执行计划”能用到相关索引的必要条件。 
2、看采用了哪种类型的连接方式。ORACLE的共有Sort Merge Join(SMJ)、Hash Join(HJ)和Nested Loop Join(NL)。在两张表连接,且内表的目标列上建有索引时,只有Nested Loop才            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-01 13:38:54
                            
                                144阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            索引目的索引的目的在于提高查询效率,可以类比字典,如果要查“mysql”这个单词,我们肯定需要定位到m字母,然后从下往下找到y字母,再找到剩下的sql。如果没有索引,那么你可能需要把所有单词看一遍才能找到你想要的,如果我想找到m开头的单词呢?或者w开头的单词呢?是不是觉得如果没有索引,这个事情根本无法完成?索引原理除了词典,生活中随处可见索引的例子,如火车站的车次表、图书的目录等。它们的原理都是一            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-07-18 22:36:57
                            
                                54阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            使用oracle的date类型时,最好使用24小时制。date类型精确的秒。
oracle的日期在24小时制中00:00:00 在Oracle中表示为叫做上午12点,也就是零点。我们中午12点叫做下午12点。呵呵。
世界是这样循环的 : 上午12点 -上午12点01 -上午1点 --上午11:59 :59 --下午12点 - 下午12点 02 - 下午1点 -下午11:59:59关于日期函数 ad            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-07-28 12:13:39
                            
                                137阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            本文会讲述优化器是如何选择索引的,例如有十万行数据,表结构如下:正常来说,如果执行select * from t where a between 10000 and 20000,那么优化器选择的是索引a,如果又选择执行如下两个事务。分别看以下两个个语句选择的是哪个索引select * from t where a between 10000 and 20000; /*Q1*/select * fr            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-16 16:03:37
                            
                                42阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
                    Oracle还是比较常用的,Oracle函数索引在某些情况下也是非常有用的。一.Oracle函数索引1.Oracle函数索引的好处:Exp: function(column1) 如果表中有1000行,即便column1列上建有索引,索引在此时也不被使用,function会执行1000次。 2.建立Oracle函数索引会使插入/更新性            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-07-02 20:30:45
                            
                                121阅读
                            
                                                                             
                 
                
                             
         
            
            
            
              用SELECT语句可以实现数据库的查询操作,同时,它还可以使用各种子句对查询结果进行分组统计、合计、排序等操作。SELECT语句还可以将查询结果生成另一个表(临时表或永久表)。  SELECT语句的语法格式:SELECT [ALL|DISTINCT] select_list
[INTO [new_table_name]]
[FROM {table_name,table_name2,...|vi            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-11 22:19:17
                            
                                94阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            我的问题:你们看我这个,1号的就走索引,4号的不走索引要全表,我希望4号走索引,加了强制走索引的语句也不管用,怎办?(我的语句:)update  t_mt  partition(P_MT5_1) mt set (mt.stat,mt.rpttime)=(select stat,rpttime from t_statbuf buf 
 where sj>=to_date('2013-05-04            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-12 15:10:43
                            
                                74阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            声明:本文思路来源于laoxiong老师的博文,就此感谢!在Oralce的搜索中,如果where条件句后使用了is null搜索条件,那么即使该列上使用了索引,Oracle也不会进行索引搜索。那么,这条规则一定正确吗?构建实验环境准备数据环境,构建数据表。SQL> create table t as select object_id,object_name,owner from dba_ob            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-08-31 19:39:01
                            
                                27阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            表t_busi_main_presend2建了索引T_BUSI_MAIN_PRESEND2_SHSTATUS在SHSTATUS字段,SHSTATUS char(1) default '0',只有2个值 '0' ,'1'。初始值为‘0’,处理之后为‘1’,表中几十万数据,大部分为‘1’,现在有8条为‘0’。现在,建索引(类型为normal,不能bitmap,会锁)后,下面语句竟然是全表!select            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-07-08 21:20:39
                            
                                77阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            演示了在oracle database中,如何让select强制使用索引            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2014-07-29 14:53:00
                            
                                828阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            在ITPUB 上看到一个帖子 http://www.itpub.net/thread-1875212-1-1.html同一条SQL语句,只有查询条件不一样,查询返回的结果集都为0,一个走了全表扫描,一个走索引。查看全表扫描的SQL语句:SQL走全表,产生了2422609个逻辑读,cost为535KS...            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2014-07-20 00:24:00
                            
                                210阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            请注意,这篇文章仅针对 InnoDB 存储引擎讨论。1、减少回表次数        我们知道,InnoDB 中索引分为两种,聚簇索引和二级索引,每个索引对应一颗B+树,其中聚簇索引的叶子节点存放完整的用户数据,而二级索引的叶子节点只存放 索引列+主键 数据,并且叶子节点按照索引列值从小到大排序链接,具体的,大家可以自行            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-15 15:10:13
                            
                                94阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            =选择或创建一个数据库= 新建语法: create database 数据库名字;create database test2;使用(切换)库: use 数据库名;use test2;=显示表= show tables;=创建表= create table 表名( 列名1 类型 约束, 列名2 类型 约束, … 列名n 类型 约束, 约束 );create table Student( id int            
                
         
            
            
            
             分析案例:1.走rule很快,但是收集了执行计划后却很慢SQL> create table test(id int);
表已创建。
SQL> insert into test select 1 from dba_objects;
已创建49883行。
SQL> commit;
提交完成。
SQL> insert into test select 2 from u            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-03-14 09:38:23
                            
                                71阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            说明在MySQL中,并不是你建立了索引,并且你在SQL中使用到了该列,MySQL就肯定会使用到那些索引的,有一些情况很可能在你不知不觉中,你就“成功的避开了”MySQL的所有索引。索引列参与计算如果where条件中age列中使用了计算,则不会使用该索引。如果需要计算,千万不要计算到索引列,想方设法让其计算到表达式的另一边去。SELECT `sname` FROM `t_stu` WHERE `ag            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-30 15:16:08
                            
                                152阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            mysql in不走索引可能的情况
                在MySQL 5.7.3以及之前的版本中,eq_range_index_dive_limit的默认值为10,之
后的版本默认值为200。所以如果大家采用的是5.7.3以及之前的版本的话,很容易采用索引统计数据而
不是index dive的方式来计算查询成本。当你的查询中使用到了IN查询,但是却实际没有            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-06-10 21:21:47
                            
                                278阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            工作中,经常遇到这样的问题,我明明在MySQL表上面加了索引,为什么执行SQL查询的时候却没有用到索引?同一条SQL有时候查询用到了索引,有时候却没用到索引,这是咋回事?原因可能是索引失效了,失效的原因有以下几种,看你有没有踩过类似的坑?1. 数据准备:有这么一张用户表,在name字段上建个索引:CREATE TABLE `user` (
  `id` int NOT NULL AUTO_INCR            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-08 10:52:11
                            
                                232阅读
                            
                                                                             
                 
                
                                
                    