数据库及SQL代码优化方案
复杂sql优化的方法及思路

复杂sql优化的方法及思路复杂SQL优化的方法及思路在实际的开发中,我们经常会遇到需要处理大量数据的情况,而这些数据往往需要通过SQL语句进行查询、统计、分析等操作。
然而,当数据量变得越来越大时,SQL语句的执行效率也会变得越来越低,这时就需要进行SQL优化来提高查询效率。
下面介绍一些复杂SQL 优化的方法及思路。
1. 索引优化索引是提高SQL查询效率的重要手段之一。
在使用索引时,需要注意以下几点:(1)选择合适的索引类型:根据查询条件的特点选择合适的索引类型,如B-Tree索引、Hash索引、全文索引等。
(2)避免过多的索引:过多的索引会降低SQL语句的执行效率,因为每个索引都需要占用一定的存储空间,并且在更新数据时需要维护索引。
(3)避免使用不必要的索引:有些查询条件并不需要使用索引,因此在编写SQL语句时需要避免使用不必要的索引。
2. SQL语句优化SQL语句的优化是提高查询效率的关键。
在编写SQL语句时,需要注意以下几点:(1)避免使用子查询:子查询会增加SQL语句的复杂度,降低查询效率。
可以使用JOIN语句代替子查询。
(2)避免使用OR操作符:OR操作符会使SQL语句的执行计划变得复杂,降低查询效率。
可以使用UNION操作符代替OR操作符。
(3)避免使用LIKE操作符:LIKE操作符会使SQL语句的执行计划变得复杂,降低查询效率。
可以使用全文索引代替LIKE操作符。
3. 数据库结构优化数据库结构的优化也是提高查询效率的重要手段之一。
在设计数据库结构时,需要注意以下几点:(1)避免使用过多的表:过多的表会增加SQL语句的复杂度,降低查询效率。
可以使用视图代替多个表。
(2)避免使用过多的字段:过多的字段会增加SQL语句的复杂度,降低查询效率。
可以使用分表代替过多的字段。
(3)避免使用过多的关联:过多的关联会增加SQL语句的复杂度,降低查询效率。
可以使用冗余字段代替过多的关联。
复杂SQL优化需要从索引优化、SQL语句优化和数据库结构优化三个方面入手,通过合理的优化手段提高查询效率,从而提高系统的性能和稳定性。
数据库性能优化方案

数据库性能优化方案
一、设计优化
1、分析应用程序对数据库的访问模式,确定查询需要优化的优先级;
2、设计数据库的索引结构;
3、记录查询执行的过程,通过查看查询分析器来发现瓶颈;
4、减少或者消除不必要的连接;
5、优化存储结构;
6、增加视图、函数、触发器等概念,使系统模块得以更加细粒度的
划分;
8、精简SQL语句,比如使用更有效的 Join 方式;
9、使用合理的数据类型,比如 varchar 改为 char等,也可以为相
同结构内的表单施加一定的压缩技术;
10、设置合理的缓存;
11、避免使用排序操作,或者尝试使用外部排序;
二、数据库工具优化
1、使用数据库工具来实现备份与恢复,并定期备份数据;
2、使用SQL分析器及数据库工具,检查索引是否被合理的使用;
3、使用数据库工具来诊断存储过程性能,并优化其执行计划;
4、使用数据库管理软件来分析系统表空间的使用,自动扩展表空间;
5、使用管理工具来控制系统资源,来优化系统性能。
三、系统配置优化
1、尽可能减少系统中的等待和锁定操作,优化排序,减少全表扫描;。
如何进行SQL调优

如何进行SQL调优SQL调优是优化数据库性能的一个重要步骤。
通常情况下,优化SQL查询的效率会使整个系统的性能得到提升。
在这篇文章中,我们将探讨如何进行SQL调优。
一、分析SQL语句首先,我们需要分析SQL查询语句。
如果SQL查询不正确或不充分,则不可能实现有效的调优。
我们需要了解查询的目的、查询的表、所需的数据以及查询的条件等等。
在分析查询语句时,我们需要关注以下几个方面:1.查询完成的时间是否满足需求;2.过滤条件是否合适;3.表之间的关系是否正确;4.是否使用了合适的索引;5.查询中使用了哪些函数;6.是否将复杂的查询分解为简单的查询;7.是否存在重复数据;8.是否使用了动态语句。
二、优化数据表结构第二个优化策略是优化数据表结构。
优化数据表结构可以使查询更快并减少查询时间。
以下是一些优化数据表结构的建议:1.将表拆分为更小的表;2.对于大型的表,可以使查询更快,更好地维护和管理;3.添加数据到表中时,使用批量插入而不是单独插入;4.为表的主键添加索引;5.使用适当的数据类型;6.删除不必要的列;7.标准化表设计。
三、使用优化查询技术第三个优化策略是使用优化查询技术。
以下是一些优化查询技术的建议:1.使用预编译语句;2.使用存储过程;3.将大的表拆分为小表;4.优化查询过程中使用的函数;5.范围查询的优化技术;6.优化复杂查询;7.熟悉查询缓存的工作原理;8.使用正确的JOIN语句。
四、使用合适的索引使用合适的索引是第四个优化策略。
索引是用于查找表中数据的一种结构。
以下是一些使用索引的建议:1.只有在需要时才使用索引;2.使用准确性为索引提供数据;3.使用索引可以使查询更快,但也会增加插入和修改的时间;4.对于大型表,使用索引可以显著提高性能;5.使用覆盖索引;6.避免使用不规范的索引;7.使用联合索引;8.使用优化查询缓存。
五、优化数据库服务器优化数据库服务器是第五个优化策略。
以下是一些优化服务器的建议:1.选择正确的硬件;2.选择正确的操作系统;3.使用正确的配置参数;4.配置正确的缓存大小;5.使用内存表代替磁盘表;6.合理设置自动增量字段;7.优化写和读的优化区域;8.备份和压缩数据。
数据库性能调优与SQL调整方案

数据库性能调优与SQL调整方案在今天的信息时代中,数据库是许多企业关键的数据存储和处理工具。
为了确保数据库系统的高效运行和响应时间,数据库性能调优是至关重要的。
本文将介绍数据库性能调优的基本概念,并提供一些建议的SQL调整方案,帮助优化数据库系统的性能。
一、数据库性能调优的概念数据库性能调优是指对数据库系统的硬件、软件以及相关应用程序进行综合优化,以提高数据库系统的响应和处理能力,提升数据库系统的性能。
数据库性能调优的目标是通过优化数据库的结构、查询语句和系统参数等来提高数据库的效率,减少系统的资源消耗,提升用户的体验。
二、数据库性能调优的原则1.合理设计数据库结构:合理的数据库设计是数据库性能调优的基础。
需要关注表的大小、索引的使用、数据模型的规范化和冗余等,以确保数据库结构的高效性和易维护性。
2.优化SQL查询语句:提高SQL查询语句的效率可以极大地改善数据库系统的性能。
使用索引、避免全表扫描、避免使用复杂的子查询和联合查询,以及减少SQL查询语句的执行次数等,都是优化SQL查询语句的常用方法。
3.优化系统参数设置:根据数据库的性能需求,合理设置数据库系统的参数。
例如,调整内存分配、缓存设置、并发连接数、日志文件大小等,以提高数据库系统的性能和稳定性。
三、SQL调整方案1.使用合适的索引:索引在数据库查询中起着重要的作用,可以快速定位数据。
正确选择索引类型、建立合适的复合索引以及定期更新索引等,都是优化SQL查询的有效手段。
2.避免全表扫描:全表扫描是一种效率较低的数据检索方法,应尽量避免使用。
可以利用索引和适当的查询条件,增加筛选条件,提高查询效率。
3.尽量减少数据库访问次数:通过合并多个查询语句、使用批量操作等方式,减少数据库系统的访问次数,可以有效地提高数据库的处理能力和响应时间。
4.避免使用过多的函数:在查询语句中使用函数会增加数据库的负担和计算成本。
可以尝试将一些函数的计算操作移至应用程序层面进行处理,减轻数据库的负担。
优化数据库的八种方法

优化数据库的八种方法优化数据库是提高数据库性能和效率的重要手段之一。
下面将介绍八种常见的数据库优化方法。
一、合理设计数据库结构数据库结构的设计直接影响数据库的性能和效率。
在设计数据库时,应注意以下几点:1. 表的字段应设置合理的数据类型和长度,避免浪费存储空间和计算资源。
2. 为表添加适当的索引,以加快查询速度。
索引应根据查询的频率和类型进行选择。
3. 合理划分表和字段的关系,避免冗余和重复数据。
使用范式化的设计可以提高数据的一致性和完整性。
二、优化查询语句优化查询语句是提高数据库性能的关键。
以下是一些优化查询语句的方法:1. 调整查询语句的顺序,将最常用和最重要的条件放在前面,以提高查询效率。
2. 避免使用通配符查询,如“%”,会导致全表扫描,影响性能。
3. 使用合适的连接方式,如INNER JOIN、LEFT JOIN等,减少不必要的数据读取。
4. 避免在WHERE子句中使用函数,函数会导致索引失效,影响查询效率。
三、优化索引索引是提高数据库查询效率的重要手段。
以下是一些优化索引的方法:1. 选择合适的索引类型,如B树索引、哈希索引等,根据查询的类型和频率进行选择。
2. 避免在索引列上使用函数或运算符,这会导致索引失效。
3. 定期对索引进行优化和重建,以保证索引的有效性和性能。
四、合理使用缓存缓存是提高数据库访问速度的重要手段。
以下是一些合理使用缓存的方法:1. 使用数据库缓存,如Redis、Memcached等,可以减少对数据库的访问次数。
2. 合理设置缓存时间,避免缓存数据过期或过长时间没有更新。
3. 使用缓存预热,提前加载常用数据到缓存中,减少用户访问时的延迟。
五、分表分库当数据库数据量庞大时,可以考虑进行分表分库操作,以减轻单个数据库的压力。
以下是一些分表分库的方法:1. 根据业务需求和数据特点,将数据划分到不同的表或数据库中。
2. 使用分片技术,将数据按照一定规则分布到多个数据库中。
复杂sql优化的方法及思路

复杂sql优化的方法及思路复杂SQL优化的方法及思路SQL是关系型数据库管理系统中最常用的语言,但是在处理复杂查询时,SQL语句往往会变得非常复杂和冗长,导致查询速度缓慢。
为了提高查询效率,我们需要进行SQL优化。
以下是一些复杂SQL优化的方法及思路。
1.索引优化索引是提高数据库查询效率的重要手段之一。
在设计表结构时,应该根据实际情况建立适当的索引。
在查询语句中使用索引可以大大减少数据扫描量,从而提高查询效率。
2.避免使用子查询子查询虽然方便了我们编写复杂的SQL语句,但是在执行过程中会增加额外的开销。
因此,在编写复杂SQL语句时应尽量避免使用子查询。
3.减少JOIN操作JOIN操作也是影响查询效率的一个重要因素。
在设计表结构时应尽量避免使用JOIN操作或者减少JOIN操作次数。
4.合理使用聚合函数聚合函数(如SUM、AVG等)可以对数据进行统计分析,在处理大量数据时非常有用。
但是,在使用聚合函数时要注意不要频繁调用,否则会降低查询效率。
5.使用EXPLAIN命令分析查询语句EXPLAIN命令可以分析查询语句的执行计划,从而找出影响查询效率的因素。
通过分析EXPLAIN结果,可以对SQL语句进行优化。
6.避免使用SELECT *SELECT *会查询所有列,包括不需要的列,增加了数据扫描量,降低了查询效率。
在编写SQL语句时应尽量避免使用SELECT *。
7.合理使用缓存缓存可以减少数据库访问次数,提高查询效率。
在设计系统架构时应考虑缓存的使用。
8.优化表结构表结构的设计也是影响SQL查询效率的一个重要因素。
在设计表结构时应尽量避免冗余数据和过多的列。
以上是一些复杂SQL优化的方法及思路。
通过合理运用这些方法和思路,可以大大提高SQL查询效率,为数据库管理系统提供更好的性能和稳定性。
常见数据库优化方案

常见数据库优化方案数据库作为企业和组织中非常重要的信息管理工具,承载着大量的数据和业务操作。
为了提高数据库的性能和效率,我们需要进行优化。
以下是常见的数据库优化方案:一、合理设计数据库结构数据库的结构设计是数据库性能优化的基础。
优化数据库结构包括以下几个方面:1. 数据库范式设计:合理运用数据库范式,减少数据冗余,提高数据库的存储效率和数据更新的速度。
2. 合理选择字段类型和长度:根据实际需求选择合适的字段类型和长度,避免存储过长的数据造成空间浪费,同时尽量减少字段数量,提高查询效率。
3. 设计索引:在经常用于查询的字段上创建索引,加快查询速度。
但过多的索引会影响更新数据的性能,因此需要权衡。
二、优化SQL查询语句SQL查询是数据库最常用的操作之一,通过优化SQL查询语句可以提高数据库的性能。
以下是一些常用的SQL查询优化方案:1. 避免使用SELECT *:只选择需要的字段,避免不必要的数据传输,提高查询速度。
2. 使用JOIN代替子查询:子查询比较耗费资源,可以使用JOIN将多个表连接起来查询。
3. 使用索引列进行查询:根据索引列进行查询可以提高查询效率。
4. 避免使用模糊查询:%like%这种模糊查询对数据库性能有较大影响,建议使用全文索引或其他高效的方式代替。
5. 分页查询优化:对于大数据量的分页查询,可以使用数据分段加载或者使用主键分页等方式提高查询效率。
三、优化数据库配置数据库的配置也会对数据库的运行性能产生一定的影响,以下是一些常见的数据库配置优化方案:1. 内存配置:根据实际情况合理设置数据库使用的内存大小,避免过大或者过小导致性能下降。
2. 缓存配置:设置适合的缓存大小,提高热点数据的读写速度。
3. 日志配置:选择合适的日志级别,避免过多的日志记录造成性能下降。
4. 网络配置:优化数据库与应用服务器之间的网络带宽和延迟,提高数据传输速度。
四、定期维护和监控数据库的维护和监控是保持数据库性能稳定和高效的重要手段。
一条sql执行过长的时间,你如何优化,从哪些方面入手?

一条sql执行过长的时间,你如何优化,从哪些方面入手?当一条SQL查询执行时间过长时,优化可以从多个方面入手。
以下是一些可能的优化方向:1. 执行计划分析:使用数据库提供的工具分析查询执行计划。
在MySQL中,可以使用EXPLAIN关键字来查看查询的执行计划,了解数据库是如何执行查询的。
通过分析执行计划,可以找到潜在的性能问题,例如是否使用了索引、是否有全表扫描等。
2. 索引优化:确保查询中涉及的列上有适当的索引。
缺乏索引或者使用不当的索引可能导致查询性能下降。
可以考虑创建、调整或删除索引以优化查询性能。
注意,索引并不是越多越好,需要根据具体查询模式和数据分布来合理选择索引。
3. 适当使用缓存:利用数据库缓存,如MySQL的查询缓存或其他缓存机制,可以避免重复执行相同的查询。
但要注意,在某些情况下,查询缓存可能并不总是有益的,因此需要谨慎使用。
4. 分析慢查询日志:启用慢查询日志并分析其中记录的查询,找出执行时间较长的语句。
慢查询日志可以提供有关执行时间、索引使用等方面的信息,有助于定位潜在的性能问题。
5. 表结构优化:检查表的设计,确保表结构符合业务需求。
有时,调整表的结构,如拆分或合并表,可以改善查询性能。
6. 分批处理:如果查询涉及大量数据,考虑使用分页或分批处理的方式,以避免一次性处理大量数据导致的性能问题。
7. 数据库参数调整:调整数据库系统的参数,如连接池大小、内存配置等,以适应查询的需求。
不同的数据库系统有不同的配置参数,需要根据具体情况来调整。
8. 使用合适的数据类型:选择合适的数据类型可以减小存储空间、提高查询效率。
尽量避免在 WHERE 子句中对字段进行函数操作,因为这可能导致索引失效。
9. 数据库版本升级:考虑将数据库升级到最新版本,因为新版本通常包含了性能改进和优化。
在进行优化时,通常需要综合考虑以上多个方面,并根据具体的业务场景和数据特点来制定合适的优化策略。
同时,对于复杂的查询和大规模数据,可能需要结合数据库监控工具来实时监测系统性能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.1、数据库及SQL代码优化方案(1)每周检查统计信息是否及时更新。
(2)每周检查各索引是否有效。
(3)每周检查分区是否正确。
(4)每周检查执行计划是否正确。
(5)每天检查RAC和ASM是否正常运行。
(6)每天检查相关日志是否正常备份。
(7)每天检查相关文件系统和表空间的占用率是否在国家税务总局规定的阀值以下。
(8)在每月申报高峰等业务繁忙期采样并找出消耗I/O资源和CPU资源较多的SQL语句。
(9)分析上述SQL语句,与软件服务商充分沟通后,提出优化建议。
(10)在每月申报高峰期每隔15分钟检查一次数据库连接数,发现异常及时处理。
1.1.1、系统数据库索引、表分区和对象优化方案数据库对象的优化主要包括:表、索引和sequence等对象,通过优化对象参数、调整对象属性(例如分区表、分区索引、反转索引等等)等方法来实现对数据库对象的优化改造。
1.1.1.1表和索引并行参数优化数据库的表和索引的并行参数值的设置对相关的sql语句的执行计划会造成影响,表和索引的degree值大于1,执行计划就偏向于使用全表和全索引扫描,另外如果并行参数值过大,短时间内也会对主机和数据库的资源造成很大的压力,因此在oltp的数据库下建议将表和索引的degree值设为1。
1.1.1.2热点大表的分区改造对访问量很大、表的记录数很多、存在热块争用的表,可以考虑对表和索引进行适当的分区改造,分散访问压力,提高数据访问的性能。
对以下表的记录数超过1000万并且记录数持续增长的大表,建议进行分区改造(地区+时间):1.1.1.3分区索引的清理对最近30天数据库分区索引访问情况进行统计,对访问次数为0的分区索引和应用部门进行确认,若确认为多余的索引,建议进行删除清理。
1.1.1.4Sequence序列优化加大sequence 的 cache,并使用noorder选项。
在RAC中经常会遇到SQ 锁等待,这是因为在RAC环境下,sequence也成为全局性的了,不同节点要生成序列号,就会产生对sequence资源的争用。
而目前大多数系统中,sequence 大多数被作为主键发生器来使用,使用的频率十分高,在RAC环境中,需要设置较大的 sequence cache,否则会造成较为严重的争用,从而影响业务。
1.1.2、SQL硬解析优化方案1.1.2.1相关知识点介绍1.1.2.1.1Oracle的硬解析和软解析Oracle对sql的处理过程:当发出一条sql语句交付Oracle,在执行和获取结果前,Oracle对此sql将进行几个步骤的处理过程:1、语法检查(syntax check)检查此sql的拼写是否语法。
2、语义检查(semantic check)诸如检查sql语句中的访问对象是否存在及该用户是否具备相应的权限。
3、对sql语句进行解析(prase)利用内部算法对sql进行解析,生成解析树(parse tree)及执行计划(execution plan)。
4、执行sql,返回结果(execute and return)其中,软、硬解析就发生在第三个过程里。
Oracle利用内部的hash算法来取得该sql的hash值,然后在library cache里查找是否存在该hash值:●假设存在,则将此sql与cache中的进行比较;●假设"相同",就将利用已有的解析树与执行计划,而省略了优化器的相关工作。
这也就是软解析的过程如果上面的2个假设中任有一个不成立,那么优化器都将进行创建解析树、生成执行计划的动作。
这个过程就叫硬解析。
1.1.2.1.2Oracle硬解析的危害硬解析即整个SQL语句的执行需要完完全全的解析,生成执行计划。
而硬解析,生成执行计划需要耗用CPU资源,以及SGA(shared pool)资源。
在此不得不提的是对库缓存中latch的使用。
latch是锁的细化,可以理解为是一种轻量级的串行化设备。
当进程申请到latch后,则这些latch用于保护共享内存的数在同一时刻不能被两个以上的进程修改。
在硬解析时,需要申请latch的使用,而latch的数量在有限的情况下就会出现争用等待的情况。
大量的latch的使用由此造成需要使用latch的进程排队越频繁,性能则逾低下。
因此创建解析树、生成执行计划对于sql的执行来说是开销昂贵的动作,所以,应当极力避免硬解析,尽量使用软解析。
1.1.2.1.3使用绑定变量避免硬解析绑定变量的本质就是本来需要做Oracle硬解析SQL变成软解析,以减少ORACLE 花费在SQL解析上的时间和资源。
假如有两条SQL:Select salary from user where name=’A’;Select salary from user where name=’B’;如果没有用绑定变量,那么这2条SQL会被硬解析2次,因为他们的谓词部分不一样,oracle认为这是两条不同的SQL语句。
如果我们用了绑定变量,如: Select salary from user where name=:X;这时,之前的2条SQL就变成了一条SQL,Oracle只需要对每一条SQL做一次硬解析,之后类似的SQL 都使用这条SQL产生的执行计划,这样就可以大大降低数据库花费在SQL解析上的资源开销。
这种效果当SQL执行的越多,就越明显。
简单的说,绑定变量就是拿一个变量来代替谓词常量,让Oracle每次对用户发来的SQL做hash 运算时,运算出的结果都是同样的Hash值,于是将所有的用户发来的类似的SQL看作是同一条SQL语句。
1.1.2.1.4应用代码的绑定变量改造方法a、动态绑定变量set serverout on;set timing on;declarel_sql varchar2(2000);l_count number;l_param1 varchar2(100);l_param2 varchar2(100);beginl_param1:='a';l_param2:='b';l_sql:='select count(*) into :x from table1 where col_1=:y and col_2=:z ';Execute Immediate l_sql into l_count using l_param1,l_param2;dbms_output.put_line(l_count);end;/1.1.3、TOP SQL优化方案对核心系统数据库业务高峰期进行AWR报告的多次采样分析,对AWR报告中大量消耗系统资源的低效率SQL语句,建议进行集中的、多批次的优化改造。
1.1.3.1SQL性能优化相关知识点介绍访问表的方式ORACLE 采用两种访问表中记录的方式:a. 全表扫描全表扫描就是顺序地访问表中每条记录. ORACLE采用一次读入多个数据块(database block)的方式优化全表扫描。
b. 通过ROWID访问表你可以采用基于ROWID的访问方式情况,提高访问表的效率, ROWID包含了表中记录的物理位置信息。
ORACLE采用索引(INDEX)实现了数据和存放数据的物理位置(ROWID)之间的联系. 通常索引提供了快速访问ROWID的方法,因此那些基于索引列的查询就可以得到性能上的提高。
1、全表扫描相关的知识1)什么叫全表扫描(TABLE FULL SCAN)在数据库中,对无索引的表进行查询一般称为全表扫描。
全表扫描是数据库服务器用来搜寻表的每一条记录的过程,直到所有符合给定条件的记录返回为止。
全表扫描的成本 = 表的数据块总数 / 多块读取2)全表扫描的危害大量消耗硬件资源尤其是系统I/O资源,被迫在硬件上进行大量的投入。
数据库的响应时间变慢,特别是在OLTP类型的数据库上,由于其小事务、高并发的特点,对全表扫描是无法容忍的,要尽可能的避免。
3)全表扫描的原因A、缺乏索引就是缺乏相关约束条件字段的索引。
解决方式:选择可选性最高的字段创建索引。
B、索引被抑制由于索引字段的隐式转换、约束条件字段前加函数、查询条件中使用<>操作符、%开头的模糊查询以及查询条件中没有组合索引的前导致列导致索引无法被正常使用。
解决方式:对SQL语句进行改写。
C、索引没有启动表和索引的统计信息没有及时更新,导致基于成本的oracle优化器没有选择合适的按索引访问数据的执行路径。
解决方式:及时收集最新的统计信息或者采用hint强制使用索引。
2、索引相关知识点1)什么是索引索引是一种允许直接访问数据表中某一数据行的树型结构,为了提高查询效率而引入,是一个独立于表的对象,可以存放在与表不同的表空间中。
索引记录中存有索引关键字和指向表中数据的指针(地址)。
对索引进行的I/O操作比对表进行操作要少很多。
2)索引的分类A、索引逻辑分类单列索引:基于一列的操作多列索引:组合索引,最多为32列。
组合索引的列不一定与表中列顺序相同。
惟一索引:列的值各不相同。
非惟一索引:列的值允许相同。
基于函数的惟一索引:利用表中一列或多列基于函数表达式所创建的索引。
B、索引物理分类分区或非分区索引,非分区既可以是B-树,也可以是位图索引。
3)B-TREE索引结构自上而下,是根结点、分枝结点及叶子结点,叶子结点中有指向表中数据行的索引行。
叶子结点被双向链表在一起,以方便按索引关键字升序或降序扫描。
4)索引的选择性(Selectivity)索引的“可选择性”是指在该索引列里存储的不同值的数目和记录总数的比。
比如某个表的记录数是1000条,而该表的索引列的值只有500个不同的值(有500个是相同或是空),这样索引的可选择性为500/1000为0.5 。
这样当然效果就不好,最好的索引可选择性(如主键索引)是1.0。
选择性越高,索引返回的数据就越少。
索引的可选择性是衡量索引的利用率的方法,比如在极端的情况下,一个表记录数是1000,而索引列的值只有5个不同的值,则索引的可选择性很差(只有0.005),这样的情形使用全表扫描要比采用索引还好。
当然了,如果查询所选择的行超过1/3,那么无论可选择性有多么高,全表扫都比索引读来得快。
组合索引包括多个字段,组合索引的选择性是多个索引字段选择性的累计,因此如果sql约束条件中包含了组合索引的所有字段,那么使用组合索引的效率是很高的。