我有一个数据库,其中有几个 BLOB 列分散在多个表中。因为我是一名开发人员并且正在考虑使应用程序代码编写更容易,所以我想将这些列转换为 NUMBER FK 列,这些列只引用一个专用于 BLOB 的表(即一个 PK ID 列和一个 BLOB 列)。这将允许我们的 ORM 库使用更少的代码更轻松地对对象进行延迟初始化。
这样做对性能或数据组织有何影响?由于这些 BLOB,数据库的大小非常大。
我有一张看起来像这样的表:
+---------------------------------------------+
| EVENT_ID | ITEM_ID | PERSON_ID | EVENT_DATE |
+---------------------------------------------+
| 123 | 1 | 2 | 21-AUG-03 |
| 124 | 1 | 3 | 22-AUG-03 |
| 125 | 1 | 45 | 23-AUG-03 |
| 126 | 1 | (null) | 24-AUG-03 |
| 127 | 2 | 2 | 25-AUG-03 |
| 128 | 2 | 6 | 26-AUG-03 |
| 129 | 2 | 1 | 27-AUG-03 |
+---------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
因此,我需要获取每个 item_id 的最新 (MAX(event_date)) …
我有一个我很好奇的索引(从很久以前开始)。它在一个基本的人表上,功能是
upper("LAST_NAME"||','||"FIRST_NAME"||"MIDDLE_NAME"||"SUFFIX_NAME")
Run Code Online (Sandbox Code Playgroud)
在尝试搜索此索引时,我最终进行了全表扫描。知道为什么吗?如果这就像我想的那样完全被破坏了,你会建议在这四列上建立一个列索引吗?
编辑
很抱歉没有提供查询。是的,查询很像,并且列都可以为空。所以我有
select *
from person p
where UPPER("LAST_NAME"||','||"FIRST_NAME"||"MIDDLE_NAME"||"SUFFIX_NAME")
like replace(upper('<search string here>'), '*', '%') || '%'
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?感谢您及时回复。