我的问题涉及Oracle 11gr2和在SQL查询中使用索引。请帮我解决下面的问题,我无法在此查询中使用索引:
SELECT ListingManagerID,
FirstName,
LastName,
PrimaryPhone,
AlternatePhone,
Email,
UserName,
Password,
RecallGuid,
CustomerSince,
PWChangeRequired,
PWExpireDate,
CallingHours,
CreateDate,
CreateIPAddress,
LastLogin,
AutoRenewFlag,
LastUpdated,
UpdatedBy,
AutoRenewRemovedDate,
AutoRenewDate,
isSupplier,
PrefferedLanguage,
AboutMe,
PictureFilePath,
IsProfilePictureDisplay,
LocaleID,
Address1,
Address2,
CityID,
CountryID,
StateProvinceID,
PostalCode,
RegistrationSource,
PPCTypeID,
GhostUser,
ProfileId,
TimezoneID,
OCA
FROM ListingManager
WHERE trim(lower(LISTINGMANAGERID)) = 'e.kkagacoe4aaae7rnr9lua5'
- 创建索引
SQL> CREATE INDEX IDX_LISTINGMANAGER_ID ON listingmanager (LOWER(listingmanagerid));
索引已创建。
- 收集统计信息
SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS('INTERSHOP', 'LISTINGMANAGER' , CASCADE=>TRUE);
PL/SQL程序执行成功。
虽然在Listingmanager Column
上创建了索引,但执行计划仍显示全表扫描。我不知道为什么还会发生全表扫描。
ListingManagerID是该表的主键,我可以修改由主键创建的索引吗?
PLAN_TABLE_OUTPUT
--------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)|
--------------------------------------------------
| 0 | SELECT STATEMENT | | 2013 | 487K| 1784 (1)|
|* 1 | TABLE ACCESS FULL| LISTINGMANAGER | 2013 | 487K| 1784 (1)|
谓词信息(由操作ID标识):
1 - filter(TRIM(LOWER("LISTINGMANAGERID"))='e.kkagacoe4aaae7rnr9lua5' )
谢谢
TRIM
添加到您的函数基于索引中或在语句中使用RTRIM
都可以解决问题。 - Lieven Keersmaekers