基于索引的SQL语句优化之降龙十八掌(转载)!

sql语句之降龙十八掌 sql语句如何,避免出现的细节问题 立即下载

一篇挺不错的关于SQL语句优化的文章,因不知原始出处,故未作引用说明,如有侵权,请联系本人!

 

1 前言
      客服业务受到SQL语句的影响非常大,在规模比较大的局点,往往因为一个小的SQL语句不够优化,导致数据库性能急剧下降,小型机idle所剩无几,应用服务器断连、超时,严重影响业务的正常运行。因此,称低效的SQL语句为客服业务的‘恶龙’并不过分。数据库的优化方法有很多种,在应用层来说,主要是基于索引的优化。本次秘笈根据实际的工作经验,在研发原来已有的方法的基础上,进行了一些扩充,总结了基于索引的SQL语句优化的降龙十八掌,希望有一天你能用其中一掌来驯服客服业务中横行的‘恶龙’。

2 总纲——建立必要的索引
     降龙十八掌,总纲只有一句话:建立必要的索引,这就是后面降龙十八掌的内功基础。这一点看似容易实际却很难。难就难在如何判断哪些索引是必要的,哪些又是不必要的。判断的最终标准是看这些索引是否对我们的数据库性能有所帮助。具体到方法上,就必须熟悉数据库应用程序中的所有SQL语句,从中统计出常用的可能对性能有影响的部分SQL,分析、归纳出作为Where条件子句的字段及其组合方式;在这一基础上可以初步判断出哪些表的哪些字段应该建立索引。其次,必须熟悉应用程序。必须了解哪些表是数据操作频繁的表;哪些表经常与其他表进行连接;哪些表中的数据量可能很大;对于数据量大的表,其中各个字段的数据分布情况如何;等等。对于满足以上条件的这些表,必须重点关注,因为在这些表上的索引,将对SQL语句的性能产生举足轻重的影响。不过下面还是总结了一下降龙十八掌内功的入门基础,建立索引常用的规则如下:
    (1) 表的主键、外键必须有索引;
    (2) 数据量超过300的表应该有索引;
    (3) 经常与其他表进行连接的表,在连接字段上应该建立索引;
    (4) 经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;
    (5) 索引应该建在选择性高的字段上;
    (6) 索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;
    (7) 复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:
       A、正确选择复合索引中的主列字段,一般是选择性较好的字段;
       B、复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引;
       C、如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;
       D、如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段;
       E、如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;
    (8) 频繁进行数据操作的表,不要建立太多的索引;
    (9) 删除无用的索引,避免对执行计划造成负面影响;
    以上是一些普遍的建立索引时的判断依据。一言以蔽之,索引的建立必须慎重,对每个索引的必要性都应该经过仔细分析,要有建立的依据。因为太多的索引与不充分、不正确的索引对性能都毫无益处:在表上建立的每个索引都会增加存储开销,索引对于插入、删除、更新操作也会增加处理上的开销。 另外,过多的复合索引,在有单字段索引的情况下,一般都是没有存在价值的;相反,还会降低数据增加删除时的性能,特别是对频繁更新的表来说,负面影响更大。

3 降龙十八掌

第一掌 避免对列的操作
     任何对列的操作都可能导致全表扫描,这里所谓的操作包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等式的右边,甚至去掉函数。  
      例1:下列SQL条件语句中的列都建有恰当的索引,但30万行数据情况下执行速度却非常慢:  
select * from record where  substrb(CardNo,1,4)='5378'(13秒) 
select * from record where  amount/30< 1000(11秒) 
select * from record where  to_char(ActionTime,'yyyymmdd')='19991201'(10秒) 
      由于where子句中对列的任何操作结果都是在SQL运行时逐行计算得到的,因此它不得不进行表扫描,而没有使用该列上面的索引;如果这些结果在查询编译时就能得到,那么就可以被SQL优化器优化,使用索引,避免表扫描,因此将SQL重写如下:
select * from record where CardNo like  '5378%'(< 1秒)
select * from record where amount  < 1000*30(< 1秒)
select * from record where ActionTime= to_date ('19991201' ,'yyyymmdd')(< 1秒)
      差别是很明显的!

第二掌 避免不必要的类型转换
      需要注意的是,尽量避免潜在的数据类型转换。如将字符型数据与数值型数据比较,ORACLE会自动将字符型用to_number()函数进行转换,从而导致全表扫描。
      例2:表tab1中的列col1是字符型(char),则以下语句存在类型转换:
select col1,col2 from tab1 where col1>10,
      应该写为: select col1,col2 from tab1 where col1>'10'。

第三掌 增加查询的范围限制
      增加查询的范围限制,避免全范围的搜索。
      例3:以下查询表record 中时间ActionTime小于2001年3月1日的数据:
select * from record where ActionTime < to_date ('20010301' ,'yyyymm')
      查询计划表明,上面的查询对表进行全表扫描,如果我们知道表中的最早的数据为2001年1月1日,那么,可以增加一个最小时间,使查询在一个完整的范围之内。修改如下: select * from record where
ActionTime < to_date ('20010301' ,'yyyymm')
and   ActionTime > to_date ('20010101' ,'yyyymm')
      后一种SQL语句将利用上ActionTime字段上的索引,从而提高查询效率。把'20010301'换成一个变量,根据取值的机率,可以有一半以上的机会提高效率。同理,对于大于某个值的查询,如果知道当前可能的最大值,也可以在Where子句中加上 “AND 列名< MAX(最大值)”。

第四掌 尽量去掉"IN"、"OR"
    含有"IN"、"OR"的Where子句常会使用工作表,使索引失效;如果不产生大量重复值,可以考虑把子句拆开;拆开的子句中应该包含索引。  
      例4: select count(*) from stuff where id_no in('0','1')(23秒)
      可以考虑将or子句分开:  
select count(*) from stuff where id_no='0' 
select count(*) from stuff where id_no='1'
      然后再做一个简单的加法,与原来的SQL语句相比,查询速度更快。

第五掌 尽量去掉 "<>"
      尽量去掉 "<>",避免全表扫描,如果数据是枚举值,且取值范围固定,则修改为"OR"方式。
      例5:UPDATE SERVICEINFO SET STATE=0 WHERE STATE<>0;
      以上语句由于其中包含了"<>",执行计划中用了全表扫描(TABLE ACCESS FULL),没有用到state字段上的索引。实际应用中,由于业务逻辑的限制,字段state为枚举值,只能等于0,1或2,而且,值等于=1,2的很少,因此可以去掉"<>",利用索引来提高效率。
      修改为:UPDATE SERVICEINFO SET STATE=0  WHERE STATE = 1 OR STATE = 2 。进一步的修改可以参考第4种方法。

第六掌 去掉Where子句中的IS NULL和IS NOT NULL
       Where字句中的IS NULL和IS NOT NULL将不会使用索引而是进行全表搜索,因此需要通过改变查询方式,分情况讨论等方法,去掉Where子句中的IS NULL和IS NOT NULL。

第七掌 索引提高数据分布不均匀时查询效率
       索引的选择性低,但数据的值分布差异很大时,仍然可以利用索引提高效率。A、数据分布不均匀的特殊情况下,选择性不高的索引也要创建。
      表ServiceInfo中数据量很大,假设有一百万行,其中有一个字段DisposalCourseFlag,取值范围为枚举值:[0,1,2,3,4,5,6,7]。按照前面说的索引建立的规则,“选择性不高的字段不应该建立索引,该字段只有8种取值,索引值的重复率很高,索引选择性明显很低,因此不建索引。然而,由于该字段上数据值的分布情况非常特殊,具体如下表:
      取值范围 1~5 6 7
      占总数据量的百分比 1% 98% 1%
      而且,常用的查询中,查询DisposalCourseFlag<6 的情况既多又频繁,毫无疑问,如果能够建立索引,并且被应用,那么将大大提高这种情况的查询效率。因此,我们需要在该字段上建立索引。

第八掌 利用HINT强制指定索引
       在ORACLE优化器无法用上合理索引的情况下,利用HINT强制指定索引。
继续上面7的例子,ORACLE缺省认定,表中列的值是在所有数据行中均匀分布的,也就是说,在一百万数据量下,每种DisposalCourseFlag值各有12.5万数据行与之对应。假设SQL搜索条件DisposalCourseFlag=2,利用DisposalCourseFlag列上的索引进行数据搜索效率,往往不比全表扫描的高,ORACLE因此对索引“视而不见”,从而在查询路径的选择中,用其他字段上的索引甚至全表扫描。根据我们上面的分析,数据值的分布很特殊,严重的不均匀。为了利用索引提高效率,此时,一方面可以单独对该字段或该表用analyze语句进行分析,对该列搜集足够的统计数据,使ORACLE在查询选择性较高的值时能用上索引;另一方面,可以利用HINT提示,在SELECT关键字后面,加上“/*+ INDEX(表名称,索引名称)*/”的方式,强制ORACLE优化器用上该索引。
比如:
    select * from  serviceinfo where DisposalCourseFlag=1 ;
       上面的语句,实际执行中ORACLE用了全表扫描,加上蓝色提示部分后,用到索引查询。如下:
    select /*+  INDEX(SERVICEINFO,IX_S_DISPOSALCOURSEFLAG)  */  *
from  serviceinfo where DisposalCourseFlag=1;
       请注意,这种方法会加大代码维护的难度,而且该字段上索引的名称被改变之后,必须要同步所有指定索引的HINT代码,否则HINT提示将被ORACLE忽略掉。

第九掌 屏蔽无用索引
     继续上面8的例子,由于实际查询中,还有涉及到DisposalCourseFlag=6的查询,而此时如果用上该字段上的索引,将是非常不明智的,效率也极低。因此这种情况下,我们需要用特殊的方法屏蔽该索引,以便ORACLE选择其他字段上的索引。比如,如果字段为数值型的就在表达式的字段名后,添加“+ 0”,为字符型的就并上空串:“||""”
如: select * from  serviceinfo where DisposalCourseFlag+ 0 = 6 and workNo =  '36' 。
      不过,不要把该用的索引屏蔽掉了,否则同样会产生低效率的全表扫描。

第十掌 分解复杂查询,用常量代替变量
    对于复杂的Where条件组合,Where中含有多个带索引的字段,考虑用IF语句分情况进行讨论;同时,去掉不必要的外来参数条件,减低复杂度,以便在不同情况下用不同字段上的索引。
      继续上面9的例子,对于包含
Where (DisposalCourseFlag < v_DisPosalCourseFlag) or (v_DisPosalCourseFlag is null) and ....的查询,(这里v_DisPosalCourseFlag为一个输入变量,取值范围可能为[NULL,0,1,2,3,4,5,6,7]),可以考虑分情况用IF语句进行讨论,类似:
IF v_DisPosalCourseFlag =1 THEN
Where DisposalCourseFlag = 1 and ....
ELSIF v_DisPosalCourseFlag =2 THEN
Where DisposalCourseFlag = 2 and ....  

第十一掌 like子句尽量前端匹配
      因为like参数使用的非常频繁,因此如果能够对like子句使用索引,将很高的提高查询的效率。
例6:select * from city where name like ‘%S%’
      以上查询的执行计划用了全表扫描(TABLE ACCESS FULL),如果能够修改为:
select * from city where name like ‘S%’
      那么查询的执行计划将会变成(INDEX RANGE SCAN),成功的利用了name字段的索引。这意味着Oracle SQL优化器会识别出用于索引的like子句,只要该查询的匹配端是具体值。因此我们在做like查询时,应该尽量使查询的匹配端是具体值,即使用like ‘S%’。

第十二掌 用Case语句合并多重扫描
     我们常常必须基于多组数据表计算不同的聚集。例如下例通过三个独立查询:
例8:1)select count(*) from emp where sal<1000;
     2)select count(*) from emp where sal between 1000 and 5000;
     3)select count(*) from emp where sal>5000;
      这样我们需要进行三次全表查询,但是如果我们使用case语句:
select
count (sale when sal <1000
then 1 else null end) count_poor,
count (sale when between 1000 and 5000
then 1 else null end) count_blue_collar,
count (sale when sal >5000
then 1 else null end) count_poor
from emp;
      这样查询的结果一样,但是执行计划只进行了一次全表查询。

第十三掌 使用nls_date_format
      例9:
select * from record where  to_char(ActionTime,'mm')='12'
      这个查询的执行计划将是全表查询,如果我们改变nls_date_format,
SQL>alert session set nls_date_formate=’MM’;
      现在重新修改上面的查询:
select * from record where  ActionTime='12'
      这样就能使用actiontime上的索引了,它的执行计划将是(INDEX RANGE SCAN)。

第十四掌 使用基于函数的索引
      前面谈到任何对列的操作都可能导致全表扫描,例如:
      select * from emp where substr(ename,1,2)=’SM’;
      但是这种查询在客服系统又经常使用,我们可以创建一个带有substr函数的基于函数的索引,
      create index emp_ename_substr on eemp ( substr(ename,1,2) );
      这样在执行上面的查询语句时,这个基于函数的索引将排上用场,执行计划将是(INDEX RANGE SCAN)。

第十五掌 基于函数的索引要求等式匹配
      上面的例子中,我们创建了基于函数的索引,但是如果执行下面的查询:
      select * from emp where substr(ename,1,1)=’S’
      得到的执行计划将还是(TABLE ACCESS FULL),因为只有当数据列能够等式匹配时,基于函数的索引才能生效,这样对于这种索引的计划和维护的要求都很高。请注意,向表中添加索引是非常危险的操作,因为这将导致许多查询执行计划的变更。然而,如果我们使用基于函数的索引就不会产生这样的问题,因为Oracle只有在查询使用了匹配的内置函数时才会使用这种类型的索引。

第十六掌 使用分区索引
      在用分析命令对分区索引进行分析时,每一个分区的数据值的范围信息会放入Oracle的数据字典中。Oracle可以利用这个信息来提取出那些只与SQL查询相关的数据分区。
      例如,假设你已经定义了一个分区索引,并且某个SQL语句需要在一个索引分区中进行一次索引扫描。Oracle会仅仅访问这个索引分区,而且会在这个分区上调用一个此索引范围的快速全扫描。因为不需要访问整个索引,所以提高了查询的速度。

第十七掌 使用位图索引
       位图索引可以从本质上提高使用了小于1000个唯一数据值的数据列的查询速度,因为在位图索引中进行的检索是在RAM中完成的,而且也总是比传统的B树索引的速度要快。对于那些少于1000个唯一数据值的数据列建立位图索引,可以使执行效率更快。

第十八掌 决定使用全表扫描还是使用索引
     和所有的秘笈一样,最后一招都会又回到起点,最后我们来讨论一下是否需要建立索引,也许进行全表扫描更快。在大多数情况下,全表扫描可能会导致更多的物理磁盘输入输出,但是全表扫描有时又可能会因为高度并行化的存在而执行的更快。如果查询的表完全没有顺序,那么一个要返回记录数小于10%的查询可能会读取表中大部分的数据块,这样使用索引会使查询效率提高很多。但是如果表非常有顺序,那么如果查询的记录数大于40%时,可能使用全表扫描更快。因此,有一个索引范围扫描的总体原则是:
      1) 对于原始排序的表  仅读取少于表记录数40%的查询应该使用索引范围扫描。反之,读取记录数目多于表记录数的40%的查询应该使用全表扫描。
      2) 对于未排序的表    仅读取少于表记录数7%的查询应该使用索引范围扫描。反之,读取记录数目多于表记录数的7%的查询应该使用全表扫描。

4 总结
      以上的招式,是完全可以相互结合同时运用的。而且各种方法之间相互影响,紧密联系。这种联系既存在一致性,也可能带来冲突,当冲突发生时,需要根据实际情况进行选择,没有固定的模式。最后决定SQL优化功力的因素就是对ORACLE内功的掌握程度了。
      另外,值得注意的是:随着时间的推移和数据的累计与变化,ORACLE对SQL语句的执行计划也会改变,比如:基于代价的优化方法,随着数据量的增大,优化器可能错误的不选择索引而采用全表扫描。这种情况可能是因为统计信息已经过时,在数据量变化很大后没有及时分析表;但如果对表进行分析之后,仍然没有用上合理的索引,那么就有必要对SQL语句用HINT提示,强制用合理的索引。但这种HINT提示也不能滥用,因为这种方法过于复杂,缺乏通用性和应变能力,同时也增加了维护上的代价;相对来说,基于函数右移、去掉“IN ,OR ,<> ,IS NOT NULL ”、分解复杂的SQL语句等等方法,却是“放之四海皆准”的,可以放心大胆的使用。
      同时,优化也不是“一劳永逸”的,必须随着情况的改变进行相应的调整。当数据库设计发生变化,包括更改表结构:字段和索引的增加、删除或改名等;业务逻辑发生变化:如查询方式、取值范围发生改变等等。在这种情况下,也必须对原有的优化进行调整,以适应效率上的需求。

国密(3)- 预主密钥/主密钥计算和Finished消息的加解密 国密的ECC-SM3-SM4-CBC模式下的预主密钥和主密钥的生成过程介绍,以及Finished消息的加解密介绍 阅读详情

相关推荐

避开RK3588开发板SDIO配置的坑:O9201SB WiFi模组接入实战指南

本文为嵌入式开发者提供了在RK3588开发板上,利用TF卡槽接入O9201SB WiFi6模组的实战指南。文章深度剖析了SDIO配置中常见的电源管理序列冲突问题,并给出了从设备树节点修改、内核编译到系统验证的完整解决方案,帮助开发者避开配置陷阱,成功实现高性能无线连接。

sprite的博客 954

oracle 性能优化操作十一: like子句尽量前端匹配

【本文转载自:http://blog.youkuaiyun.com/helloboat/article/details/42486705,对作者表示感谢。】因为like参数使用的非常频繁,因此如果能够对like子句使用索引,将很高的提高查询的效率。例:select * from city where name like ‘%S%’;以上查询的执行计划用了全表扫描(TABLE ACCESS FULL),如果能够修

卓如的诗意程序 1065

信捷XD/XL系列PLC与C#通信实战:Modbus-RTU协议详解(附完整代码)

本文详细介绍了信捷XD/XL系列PLC与C#通过Modbus-RTU协议实现高效通信的实战指南。从硬件连接到软件配置,再到核心通信功能的实现与优化,提供了完整的代码示例和工业级应用建议,帮助开发者快速构建稳定的自动化通信系统。

weixin_28292761的博客 511

基于索引的SQL语句优化之降龙十八掌

一篇挺不错的关于SQL语句优化的文章,因不知原始出处,故未作引用说明! 1 前言      客服业务受到SQL语句的影响非常大,在规模比较大的局点,往往因为一个小的SQL语句不够优化,导致数据库性能急剧下降,小型机idle所剩无几,应用服务器断连、超时,严重影响业务的正常运行。因此,称低效的SQL语句为客服业务的‘恶龙’并不过分。数据库的优化方法有很多种,在应用层来说,主要是基于索引的优化。本次秘

刘伟技术博客 1万+

富斯遥控器-ros机器人控制

富斯遥控器-ros机器人手柄控制

zkh7758的博客 1702

NXP(恩智浦)—TJA1043TK CAN收发器芯片详解

本文章主要讲解NXP(恩智浦)—TJA1043TK CAN收发器的相关知识。

零零刷的博客 2201

常用的SQL优化技巧

从使用索引来考虑SQL语句 避免索引列上的函数,如SUBSTR/UPPER/NVL/TO_CHAR/TO_DATE/TRUNC 避免索引列上的计算公式:如果索引列上使用了计算公式,则索引不能使用,可以通过更改计算公式来避免 不使用索引:Select e.Ename From Emp e Where e.Sal * 1.1 > 900 使用索引:Select e.Ename From ...

Jane Chiu 464

热红外图像小目标检测算法综述

热红外小目标检测算法综述,着重介绍基于深度学习的小目标检测算法

Littro Innovations 4244

MySQL like用法

MySQL LIKE 语法 LIKE运算符用于WHERE表达式中,以搜索匹配字段中的指定内容,语法如下: WHERE column LIKE pattern WHERE column NOT LIKE pattern 在LIKE全面加上NOT运算符时,表示与LIKE相反的意思,即选择column不包含pattern的数据记录 LIKE通常与通配符%一起使用,%表示通配pattern中出现...

weixin_30481087的博客 1462

如何在飞腾平台上安装Ubuntu操作系统

注意: 若主板上配置的是NVME硬盘,在进行内核配置时,需要将内核的NEME驱动勾选上,否则移植内核时,无法找到文件系统,进不去操作系统。可以通过rufus软件将镜像做到U盘中,本次使用版本为Rufus 3.9.124 ,其他版本也可以。不要下载live版本的,没有准备网络环境,是一个头疼的事情,笔者暂时没有实现网络安装。将U盘接到主板usb口上,接上串口,显示器,,必需串口有打印才可以安装。可以通过dd命令,将iso安装到U盘。安装的是最小系统,缺少很多命令,需要联网更新,或则更换飞腾专用内核。

技术联盟 2645

【VisDrone数据集】YOLOX训练VisDrone数据集步骤与结果

YOLOX训练VisDrone数据集步骤与结果。

Gorgeous_wxd 2233

索引和查询优化

关于SQL server的索引和查询优化的粗略内容

My vegetable has exploded. 1879

Unity中的Timeline

Timeline与动画系统类似,但是它可以针对多个物体做出一系列多个动画,它可以创建多个轨道,对象激活与隐藏轨道,动画轨道,声音轨道等。每个轨道都可以单独编辑,轨道内的不同资源可以排列并且融合

L的博客 1万+

SQL语句优化的降龙十八掌(针对的是Oracle数据库)

转载地址:http://blog.youkuaiyun.com/lovelion/article/details/8462814 1 前言       客服业务受到SQL语句的影响非常大,在规模比较大的局点,往往因为一个小的SQL语句不够优化,导致数据库性能急剧下降,小型机idle所剩无几,应用服务器断连、超时,严重影响业务的正常运行。因此,称低效的SQL语句为客服业务的‘恶龙’并不过分。

漂泊一剑客的专栏 1081

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

SQL索引优化

转载:http://www.cnblogs.com/dahuotao/archive/2010/03/10/1682272.html 序言数据库的优化方法有很多种,在应用层来说,主要是基于索引的优化。本次秘笈根据实际的工作经验,在研发原来已有的方法的基础上,进行了一些扩充,总结了基于索引的SQL语句优化的降龙十八掌,希望有一天你能用其中一掌来驯服客服业务中横行的‘恶龙’总纲建立必要的索引这次传授...

liyanhui 277

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

SQL中数据查询分页操作集中地

(转)查询 31到40条记录 的各种玩法(分页可以支持海量数据5百万,时间大约在1--5秒)--推荐 URL:http://blog.youkuaiyun.com/arvinstudy/article/details/8509766 SQL数据库中查找一条记录是否存在 count(推荐) URL:http://blog.youkuaiyun.com/arvinstudy/article/details/8489

码农 1038

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

[SQL调优] Maclean讲SQL调优精要

Maclean讲SQL调优精要 本期专题文档下载地址: ©著作权归作者所有:来自51CTO博客作者maclean_007的原创作品,如需转载,请注明出处,否则将追究法律责任 Oracle 数据库 ...

weixin_33911824的博客 153

索引:“其实我是一种数据结构”

“人家真的 不是目录” 索引的自白引言索引概述索引的创建索引的删除索引的查询explain查询有无索引show keys查询何种索引索引的原理聚簇索引辅助索引联合索引索引存在的问题 引言 大家好,我是索引,在MySQL中你可以使用CREATE INDEX indexName ON table_name (column_name)或alter table table_name add index(column_name)来创造我!在这里我主要澄清一下,我不是目录,你可以认为我是一种排序的数据结构,实在不行你就

weixin_44988779的博客 1172

mysql 基本语句使用

目录 group by 和 distinct的区别 GROUP BY 语法 FIND_IN_SET语法 left join group_concat group by 和 distinct的区别 共同点: 去重 group by select * from i_plc_procedure_record where updateTime &gt...

u012447842的博客 626

oracle数据库 理论知识,Oracle 目录相关理论知识

(一)建立索引常用的规则如下:1)表的主键、外键必须有索引;2)数据量超过300的表应该有索引;3)经常与其他表进行连接的表,在连接字段上应该建立索引;4)经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;5)索引应该建在选择性高的字段上;6)索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;7)复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替...

weixin_39850167的博客 175

【SQL之降龙十八掌】01——亢龙有悔:入门10题

sql入门10题,简单却不简单,看看你能坚持到第几题

半旧518的博客 1033

我说 SELECT COUNT(*) 会造成全表扫描,面试官让我回去等通知

前言上篇 SQL 进阶技巧(下) 中提到使用以下 sql 会导致慢查询SELECTCOUNT(*)FROMSomeTable SELECTCOUNT(1)FROMSomeTa...

python爬虫人工智能大数据 1215
上一篇: Interbase默认用户名和密码。
下一篇: 如何打开EAS后台sql日志收集器?
秦亚伟
博客等级 码龄26年 155粉丝 127原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值