如何让索引只能被一个SQL使用】的更多相关文章

有个徒弟问我,要创建一个索引,去优化一个SQL,但是创建了索引之后其他 SQL 也要用 这个索引,其他SQL慢死了,要优化的SQL又快.遇到这种问题咋搞? 一般遇到这种问题还是很少的.处理的方法很多.我简单的给大家介绍一种方法. 还是直接看我实验操作步骤吧. 在SCOTT账户里面创建一个测试表和一个索引 SQL> create table test as select * from dba_objects; 表已创建. SQL> create index idx_test on test(ob…
一.聚集索引和非聚集索引 聚集索引:类似字典的拼音目录.表中的数据按照聚集索引的规则来存储的.就像新华字典.整本字典是按照A-Z的顺序来排列.这也是一个表只能有一个聚集索引的原因.因为这个特点,具体索引应该建在那些经常需要order by,group by,按范围取值的列上.因为数据本身就是按照聚集索引的顺序存储的.不应该建在需要频繁修改的列上,因为聚集索引的每次改动都以为这表中数据的物理数据的一次重新排序.就想新华字典一样.聚集索引适合建立在大数据量但是小数目不同值的列上,就像新华字典有收录了…
有个徒弟问我,要创建一个索引,去优化一个SQL,可是创建了索引之后其它 SQL 也要用 这个索引,其它SQL慢死了.要优化的SQL又快.遇到这样的问题咋搞? 一般遇到这样的问题还是非常少的.处理的方法非常多.我简单的给大家介绍一种方法. 还是直接看我实验操作步骤吧. 在SCOTT账户里面创建一个測试表和一个索引 SQL> create table test as select * from dba_objects; 表已创建. SQL> create index idx_test on tes…
oracle 11g ,在通过命令impdp向一个数据库用户导入数据时,出现错误: ORA-14102: 只能指定一个 LOGGING 或 NOLOGGING 子句 造成此问题的原因是:当导入的表里没有数据时,在给表创建索引和主键时会出现该错误.引起错误的语句大概如下: ALTER TABLE "test"."XIEBO_EXTREMUM" ADD CONSTRAINT "PK_XIEBO_EXTREMUM" PRIMARY KEY ("…
前言 SQL作为Web开发是永远离开不的一个话题,天天写SQL,可是你知道一个SQL是如何执行的吗? select name from user where id = 1; 上面是一个简单的查询语句,交给数据库去执行,然后返回name.看起来很简单,可是内部的执行过程却很多人都不知道. 今天就把MySQL拆开看看,看一下它究竟是怎么工作的. SQL基本架构 从上图可以看出,MySQL分为Server层和存储引擎层 Server层 连接器 连接器主要是与客户端建立连接, 包含本地socket和大多…
今天收到运营同学的一个 SQL,有点复杂,尤其是这个 SQL explain 都很长时间执行不出来,于是我们后台团队帮忙解决这个 SQL 问题,却正好发现了一个隐藏很深的线上问题. select a.share_code, a.generated_time, a.share_user_id, b.user_count, b.order_count, a.share_order_id, b.rewarded_amount from t_risk_share_code a, (select coun…
这是个终极问题,因为优化本身的复杂性实在是难以总结的,很多时候优化的方法并不是用到了什么高深莫测的技术,而只是一个思想意识层面的差异,而这些都很可能连带导致性能表现上的巨大差异. 所以有时候我们应该先搞清楚需求到底是什么,SQL本身是否合理,这些思考很可能会使优化工作事半功倍.而本文是假设SQL本身合理,从Oracle提供给我们的一些技术手段来简单介绍下Oracle数据库,该如何使用一些现有的技术来优化一个SQL执行的性能. 确定需要优化的SQL文本及当前SQL执行计划 确定SQL涉及的所有表及…
当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式.比如 select * from T_Employee where FNumber not in ( select top 5*   from T_Employee order by FSalary desc)order by FSalary 在sql中执行出现错误 更正:select * from T_Employee where FNumber  not in (select top 5 FNumber from T_Em…
前段时间,同事遇到一个 Sql语句的问题,一个列表分页功能响应在30 s以上,看数据库里面的数据条数,数据量也不大,相关字段的一些索引也都有,可就是慢.于是找出具体的sql 语句出来分析,分页功能主要有个sql 语句,select 查询和 count 两条语句. select 查询字段的时候,速度挺快,执行时间在1 s以内 ,但是执行count(1)  的时候,速度巨慢,执行时间增加到10 s以上.奇怪的是count 语句为什么会比select 语句还慢呢.总之可以确定的就是count语句导致的…
前言 在实时计算中,通常是从队列中收集原始数据,这种原始数据在内存中通常是一个java bean,把数据收集过来以后,通常会把数据落地到数据库,供后面的ETL使用.举个一个简单的例子,对一个游戏来说,为了统计某个游戏,某个服务器的登陆注册 等事件,原始数据对应的java bean可能会是这样: public class Event { private String userName; private String game; private String server; private Stri…