`
woshizn
  • 浏览: 209702 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

SQL中like语句的索引使用

阅读更多
  • 1、尽量不要使用 like '%..%'
  • 2、对于 like '..%..' (不以 % 开头),Oracle可以应用 colunm上的index
  • 3、对于 like '%...' 的 (不以 % 结尾),可以利用 reverse + function index 的形式,变化成 like '..%' 代码




建测试表和Index。

注意:重点在于带reverse的function index。同时,一定要使用CBO才行......



SQL> select reverse('123') from dual;

REVERSE('123')

--------------------------------

321

1 row selected.



SQL> create table test_like as select object_id,object_name from dba_objects;

Table created.



SQL> create index test_like__name on test_like(object_name);

Index created.



SQL> create index test_like__name_reverse on test_like(reverse(object_name));

Index created.



SQL> analyze table test_like compute statistics for table for all indexes;

Table analyzed.



SQL> set autot trace



--常量开头的like , 会利用index ,没问题......

SQL> select * from test_like where object_name like AS%';

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=655 Bytes=15720)

1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST_LIKE' (Cost=2 Card=655Bytes=15720)

2 1 INDEX (RANGE SCAN) OF 'TEST_LIKE__NAME' (NON-UNIQUE) (Cost=2 Card=118)



-- 开头和结尾都是%,对不起,很难优化



SQL> select * from test_like where object_name like '%%';



Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=6 Card=655 Bytes=15720)

1 0 TABLE ACCESS (FULL) OF 'TEST_LIKE' (Cost=6 Card=655 ytes=15720)



-- 以常量结束,直接写的时候是不能应用index的

SQL> select * from test_like where object_name like '%S';

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=6 Card=655 Bytes=15720)

1 0 TABLE ACCESS (FULL) OF 'TEST_LIKE' (Cost=6 Card=655 Bytes=15720)



--'以常量结束的,加个reverse 函数,又可以用上index了'

SQL> select * from test_like where reverse(object_name)like reverse('%AS');

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=655 Bytes=15720)

1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST_LIKE' (Cost=2 Card=655 Bytes=15720)

2 1 INDEX (RANGE SCAN) OF 'TEST_LIKE__NAME_REVERSE' (NON-UNIQUE) (Cost=2 Card=118)
分享到:
评论

相关推荐

    索引的SQL语句优化

    例如,`SUBSTR`函数和除法运算在`WHERE`子句中使用时,即使目标列有索引,也可能无法利用该索引。解决策略是尽量将操作移至等式右侧或完全避免使用。 2. **避免不必要的类型转换**:类型不匹配的比较会导致数据库...

    SQL 执行超长语句

    同时要注意避免使用LIKE开头等无法利用索引的操作。 4. **减少子查询**:尽量减少嵌套子查询的使用,因为每次执行子查询都会产生额外开销。可以考虑使用JOIN代替部分子查询。 5. **使用存储过程**:对于逻辑较为复杂...

    SQLserver常用语句大全

    本资源摘要信息涵盖了 SQL Server 中常用的语句大全,包括数据操作、数据定义、数据控制、事务控制、程序化 SQL 等方面的知识点。 一、数据操作 * SELECT 语句:从数据库表中检索数据行和列 * INSERT 语句:向...

    SQL数据库 查询语句使用精华

    ### SQL数据库查询语句使用精华 #### 一、SQL查询语句概述与基本结构 SQL(Structured Query Language)是一种用于管理关系型数据库的标准语言。它主要用于执行查询、更新数据、创建新表、索引以及视图等操作。...

    sql常用sql语句

    ### SQL常用语句详解 #### 创建数据库 在SQL中,创建数据库是一项基本操作,通过`CREATE DATABASE`命令来实现。创建数据库时,可以指定数据库的名字、初始大小、最大大小以及增长方式等属性。 ##### 示例代码解析 ...

    SQLserver查询语句大全

    SELECT 语句中使用 ALL 或 DISTINCT 选项来显示表中符合条件的所有行或删除其中重复的数据行,默认为 ALL。使用 DISTINCT 选项时,对于所有重复的数据行在 SELECT 返回的结果集合中只保留一行。 5. 限制返回的行数 ...

    SQL使用Like模糊查询

    在本教程中,我们将深入探讨如何在SQL中使用`LIKE`关键字进行模糊查询。 ### 1. LIKE关键字的基本使用 `LIKE`关键字通常与`WHERE`子句一起使用,用于在查询中指定条件。一个基本的`LIKE`语句结构如下: ```sql ...

    Mysql中SQL语句不使用索引的情况

    在MySQL中,SQL语句不使用索引的情况可能会影响数据库查询的性能,因为索引的主要目的是加速数据检索。以下是一些常见的原因导致MySQL查询不使用已建立的索引: 1. **索引选择性较低**:如果MySQL评估后认为全表...

    SQL语句英文翻译成中文

    在SQL的SELECT语句中,可以使用各种运算符和通配符来过滤结果,如`=`, `, `>`, `LIKE`, `%`, `_` 等。例如,`LIKE '%find this%'` 查找包含"find this"的字符串,而`LIKE '[a-zA-Z]%'` 查找以字母开头的字符串。同时...

    影响sql语句查询效率的因素

    本文将深入探讨影响SQL语句查询效率的关键因素,特别关注查询优化与LIKE语句的使用,帮助数据库管理员和开发人员识别并解决查询性能瓶颈。 ### 影响SQL查询效率的因素 #### 1. **处理NULL值** 当SQL查询涉及对...

    Sql2008_全文索引详解

    与LIKE语句不同,全文索引可以理解特定语言的规则,进行词语和短语的精确搜索。在处理大量记录的文本数据时,全文索引显著提升了查询性能。例如,对于数百万条记录的文本数据,LIKE查询可能需要几分钟,而使用全文...

    SQL SEVER常用语句小结

    通过以上对 SQL Server 常用语句的详细介绍,我们可以更全面地理解如何进行基本的数据库操作,包括创建表、插入数据、删除数据、更新数据、添加索引、排序查询、统计查询、条件查询、分组聚合查询以及去重查询等。...

    SQL语句拼接

    - 确保SQL语句中的关键字段有索引支持,这样可以显著提高查询速度。 3. **合理使用缓存**: - 对于经常访问的数据,可以考虑使用缓存技术来减少对数据库的直接访问次数。 4. **限制返回结果的数量**: - 如果只...

    SQL查询字段被包含语句

    在SQL查询中,当需要查找含有特定字段或字符串的数据时,`LIKE`关键字通常是首选工具。`LIKE`关键字配合通配符 `%` 可以帮助我们进行模糊匹配。例如,如果我们有一个`ConnectName`表,其中`name`字段存储着联系人的...

    sql server 中sql语句大总结

    在SQL Server中,SQL语句是用于管理和操作数据库的核心工具,涵盖了数据定义、数据操纵和数据控制等各个方面。以下是对这些语句的详细说明: 1. **DDL (数据定义语言)**: - `CREATE`:用于创建数据库对象,如...

    SQL Server 2005 全文索引

    在传统的SQL查询中,如果要搜索text或ntext列中的特定词或短语,通常需要使用LIKE操作符,这在处理大量数据时效率极低。全文搜索则解决了这个问题,它提供了一个更强大的解决方案。全文索引将文本内容分解成单独的...

    sql中as的用法和一些经典的sql语句.doc

    本文总结了一些常用的SQL语句,包括DELETE、TRUNCATE、UPDATE、SELECT、AS用法、LIKE语句、NOT EXISTS语句、UNION语句、INSERT语句和全文索引等。这些语句可以帮助开发者更好地管理数据库和查询数据。

    如何写出高效率的SQL语句--SQL优化技巧

    如何写出高效率的SQL语句-...1. 避免给 SQL 语句中引用的索引列添加表达式。 2. 避免使用 SELECT \*,而是只选择需要的列。 通过学习这些索引的知识点和 SQL 优化技巧,可以编写出高效率的 SQL 语句,提高数据库性能。

    基于索引的SQL语句优化

    18. **监控和分析执行计划**:定期监控查询执行计划,了解索引使用情况,并据此调整索引或SQL语句。 通过掌握并运用这些“降龙十八掌”,开发者能够针对具体的业务场景,有针对性地优化SQL语句,提高数据库的处理...

    SQL经典基础语句大全

    - `SELECT`:用于从数据库中检索数据,是最常用的SQL语句。可以指定特定的列、使用条件过滤数据,进行排序和分组,甚至进行联接操作。 - `INSERT`:向数据库表中添加新的数据行。可以插入单行或使用INSERT INTO......

Global site tag (gtag.js) - Google Analytics