以前有个人问过我一个问题,在查询的时候百分号的位置跟是否进行索引扫描的关系,它的答案大概是:%出现在字符串的第一个位置则不进行索引扫描,如果在中间和末尾则进行索引扫描,为了验证这个结论是否正确我在DB2中做了如下实验:
db2cmd
db2start
db2 connect to sample(如果sample数据库不存在可以用db2sampl创建)
db2 "create table test(col1 varchar(20))"
db2 "insert into test(col1) values('qooinmdfoaf00'),('adfafeee')"
db2 "create index col1 on test(col1 asc )"
db2expln -d sample -u luzl yqqlm0421 -terminal -q "select * from test where col1 like '%k'" -g
DB2 Universal Database Version 9.1, 5622-044 (c) Copyright IBM Corp. 1991, 2006
Licensed Material - Program Property of IBM
IBM DB2 Universal Database SQL and XQUERY Explain Tool
DB2 Universal Database Version 9.1, 5622-044 (c) Copyright IBM Corp. 1991, 2006
Licensed Material - Program Property of IBM
IBM DB2 Universal Database SQL and XQUERY Explain Tool
******************** DYNAMIC ***************************************
==================== STATEMENT ==========================================
Isolation Level = Cursor Stability
Blocking = Block Unambiguous Cursors
Query Optimization Class = 5
Partition Parallel = No
Intra-Partition Parallel = No
SQL Path = "SYSIBM", "SYSFUN", "SYSPROC", "SYSIBMADM",
"LUZL"
Statement:
select *
from test
where col1 like '%k'
Section Code Page = 1208
Estimated Cost = 0.014781
Estimated Cardinality = 0.200000
Access Table Name = LUZL.TEST ID = 2,5
| Index Scan: Name = LUZL.COL1 ID = 1
| | Regular Index (Not Clustered)
| | Index Columns:
| | | 1: COL1 (Ascending)
| #Columns = 1
| #Key Columns = 0
| | Start Key: Beginning of Index
| | Stop Key: End of Index
| Index-Only Access
| Index Prefetch: None
| Lock Intents
| | Table: Intent Share
| | Row : Next Key Share
| Sargable Index Predicate(s)
| | #Predicates = 1
| | Return Data to Application
| | | #Columns = 1
Return Data Completion
End of section
Optimizer Plan:
RETURN
( 1)
|
IXSCAN
( 2)
/ \
Index: Table:
LUZL LUZL
COL1 TEST
很明显,使用了索引扫描,大家再别的数据库试试,是否这个结论仅仅是传说还是,有根据呢?
分享到:
相关推荐
**实验描述:** 本次实验旨在让学生掌握如何在数据库中创建表和索引,同时理解并实践数据完整性的重要性。 **实验目标:** - 掌握表和索引的创建方法及其结构修改技巧。 - 了解并建立表之间的逻辑关系。 - 实践...
### Oracle LIKE 语句优化详解 ...特别是通过创建适当的索引和使用反向索引技术,能够在大多数情况下避免全表扫描,从而提升整体系统效率。希望本文介绍的方法能够帮助读者在实际工作中更好地应对类似的问题。
使用like关键字进行查询的时候,如果是以 "%" 开头,索引就会失效。例如,SELECT * FROM table WHERE column LIKE '%string%',这样会导致索引失效。因为数据库需要扫描整个表来找到匹配的记录,而不是使用索引。解决...
sql学习 索引去哪儿_like与 %间一波三则的故事.sql
### SQL实验知识点详解 #### 实验目的概述 本次实验旨在帮助学生通过实践加深对SQL语言的理解,特别是关于分组、排序、聚合函数以及连接查询等关键概念的应用。具体包括: 1. **掌握通配符的用法**:通配符在SQL...
### Oracle数据库实验操作知识点 #### 第一部分:SQL基础 ##### 基本查询语句 - **实验1:** 编写一个简单的SQL查询语句,用于查询表中的所有行和所有列。例如: ```sql SELECT * FROM 表名; ``` - **实验2:**...
MySQL中的LIKE操作符常用于执行模糊查询,但其性能表现往往取决于查询模式和索引的使用情况。在处理大量数据时,低效的LIKE查询可能导致显著的性能下降。以下是一些关于如何优化MySQL LIKE模糊查询的策略: 1. **...
【机器人】Car-Like小车移动机器人控制实验是机器人学领域的一个重要实践环节,它涉及到自动控制、传感器技术、机器人导航等多个方面的知识。这个实验旨在让学生理解和掌握移动机器人的基本控制策略,通过实际操作和...
这类查询往往会导致全表扫描,消耗大量的CPU资源和时间,进而拖慢整体系统的响应速度。本教程将探讨如何解决MySQL大数据量下LIKE查询慢的问题,并介绍一种JAVA模拟LIKE的方法来提升查询效率。 首先,我们需要理解...
使用EXPLAIN和ANALYZE命令分析查询执行过程,检查是否存在全表扫描或者慢查询。根据查询计划的结果,可能需要调整索引类型或参数设置,如costs和statistics,以适应查询模式。 综上所述,优化PostgreSQL中的LIKE...
3. **覆盖索引**:尝试创建能够涵盖查询所需所有列的索引,以减少表扫描。 4. **索引统计信息**:定期更新索引统计信息,以便查询优化器能够做出更准确的决策。 5. **避免频繁更改的列作为索引**:如果某个列经常被...
当在同一个查询中同时使用`LIKE 'XXX%'`和其他字段的比较运算时,为了使索引能够被有效利用,`LIKE`语句必须是复合索引中最左边的字段。这是因为数据库需要首先定位到包含目标字符串的记录集合,然后再应用其他筛选...
**LIKE操作符与通配符前导**:使用`LIKE`操作符进行模糊匹配时,如果模式以百分号`%`开始,如`WHERE City like '%YOK%'`,数据库通常无法使用索引,因为这种模式表示从任何位置开始的任意字符序列,因此必须扫描所有...
在SQL查询中,LIKE运算符是一个非常重要的字符串匹配工具,尤其在处理数据过滤和搜索时。这个运算符允许我们使用通配符来进行部分匹配,帮助我们更灵活地找到符合特定模式的数据行。以下是对LIKE运算符的详细说明: ...
MySQL数据库是世界上最流行的开源关系型数据库管理系统之一,其高效的数据查询能力在很大程度上依赖于索引。本笔记将深入探讨MySQL中的索引使用,旨在帮助你提升数据库性能。 1. 索引的概念与类型: - 索引是一种...
### MySQL索引最佳实践 #### 一、理解MySQL索引的重要性 索引是数据库性能优化中最常用也是最重要的手段之一。合理的索引设计可以显著提高查询效率,减少服务器资源的消耗。在MySQL中,索引的选择与配置对于开发...
1. 对于全表扫描和like操作(特别是以%开头的),B-Tree索引效率较低。 2. 更新索引字段时,可能导致索引页分裂或合并,增加维护成本。 二、Bitmap索引 Bitmap索引将每个值映射为一个位图,适合于在多列上进行并集...
1. 索引失效 1.1 普通索引 场景一:SELECT * FROM user_info WHERE id + 1 = 2; 索引的列如果是表达式的一部分或者是函数的参数,则失效。 场景二:SELECT * FROM user_info WHERE name LIKE '%ook'; like查询前面...