SQL有没有办法在不进行全表扫描的情况下使用Lower

标签 sql database oracle

我目前在我的 SQL 中使用 lower() 函数。

根据这个线程,在列上使用 lower() 将导致全表扫描: Avoid full table scan

有没有办法防止这种情况或将扫描的影响降到最低?我正在使用 Oracle 10。

我的SQL:

select * from USER u where lower(u.USERNAME) = lower(?)

最佳答案

如果您总是使用小写搜索,您可以在小写的用户名上创建索引,就像我在 demo 中所做的那样.

这是我演示的语法:

CREATE TABLE t1
    (username varchar2(4))
;

CREATE INDEX t1_idx ON t1(lower(username));

关于SQL有没有办法在不进行全表扫描的情况下使用Lower,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20848838/

相关文章:

sql - sql server 查询中的 UNION ALL 与 OR 条件

database - 在 Postgres 查询期间设置临时全局变量

php和oracle OCI查询

mysql - 这个 MySQL 经纬度距离函数的错误是什么?

sql - ActiveRecord 查询返回对象两次(同一对象的 2 个实例)

mysql - 如何在 MySQL 中忽略插入语句中的连续重复项

python - Python中的sqlite3:我可以增加最大连接数吗?

java - 如何比较第一个表 ID 和第二个表类别 ID 并在 Android 中显示数据 category_id 明智的数据库

sql - 获取特定时间和日期的系统时间 - Oracle SQL

oracle - 无需DBA权限即可更改不同数据库下多个模式的密码?