Oracle的NLS_COMP和NLS_SORT参数

NLS_COMP和NLS_SORT参数 Oracle默认是采用binary进行排序,这对于例如中文的排序来说,是不恰当的。 使用这两个参数可以指定排序的方法,比如拼音或是,要注意可能会引起性能问题。 解决方法是使用NLSSORT函数来建立一个函数索引。 NLS_COMP = { BINARY | LIN

NLS_COMP和NLS_SORT参数
Oracle默认是采用binary进行排序,这对于例如中文的排序来说,是不恰当的。
使用这两个参数可以指定排序的方法,比如拼音或是,要注意可能会引起性能问题。
解决方法是使用NLSSORT函数来建立一个函数索引。

NLS_COMP = { BINARY | LINGUISTIC | ANSI }

BINARY
Normally, comparisons in the WHERE clause and in PL/SQL blocks is binary unless you specify theNLSSORT function.
LINGUISTIC
Comparisons for all SQL operations in the WHERE clause and in PL/SQL blocks should use the linguistic sort specified in theNLS_SORT parameter. To improve the performance, you can also define a linguistic index on the column for which you want linguistic comparisons.
ANSI
A setting of ANSI is for backwards compatibility; in general, you should setNLS_COMP to LINGUISTIC

NLS_SORT = { BINARY | linguistic_definition}
NLS_SORT specifies the collating sequence for character value comparison in various SQL operators and clauses, for example, ORDER BY, GROUP BY, comparison conditions (=, , =), IN, BETWEEN, LIKE, MIN/MAX, GREATEST/LEAST, and INSTR.

If the value is BINARY, then comparison is based directly on byte values in the binary encoding of the character values being compared. The ordering depends on the character set of the compared values, which is either the database character set (for VARCHAR2, CHAR, LONG, and CLOB) or the national character set (for NVARCHAR2, NCHAR, and NCLOB).

If the value is a named linguistic sort, then comparison is defined by this sort. A linguistic sort uses various rules to achieve ordering expected by speakers of one or more natural languages. This is usually the same ordering that is used in dictionaries and/or telephone directories in those languages.

The BINARY comparison is faster and uses less resources than any linguistic comparison but for text in a natural language, it does not provide ordering expected by users.
The value of NLS_SORT affects execution plans of queries. Because a standard index cannot be used as a source of values sorted in a linguistic order, an explicit sort operation must usually be performed instead of an index range scan. A functional index on the NLSSORT function may be defined to provide values sorted in a linguistic order and reintroduce the index range scan to the execution plan.

下面做个测试:
首先来看看可用的中文排序方法:
select value from v$nls_valid_values where parameter=’SORT’ and value like ‘%SCHINESE%’;
返回可用的中文排序方法
SCHINESE_PINYIN_M    — 按照拼音排序
SCHINESE_STROKE_M — 按照笔划(第一顺序)、部首(第二顺序)排序
SCHINESE_RADICAL_M — 按照部首(第一顺序)、笔划(第二顺序)排序

下面来做测试。
create index emp_ename_idx on emp(ename);
现在察看select * from emp where ename=’Mike’;的执行计划,
explain plan for select * from emp where ename=’Mike’;
select * from table(dbms_xplan.display);
可以看到Oracle会走索引emp_ename_idx。

1.———————————————————————————————  
2.| Id  | Operation                   | Name          | Rows  | Bytes | Cost (%CPU)| Time     |  3.———————————————————————————————   4.|   0 | SELECT STATEMENT            |               |     1 |    46 |     2   (0)| 00:00:01 |  5.|   1 |  TABLE ACCESS BY INDEX ROWID| EMP           |     1 |    46 |     2   (0)| 00:00:01 |  6.|*  2 |   INDEX RANGE SCAN          | EMP_ENAME_IDX |     1 |       |     1   (0)| 00:00:01 |  7.———————————————————————————————   8. 
9.Predicate Information (identified by operation id):  10.—————————————————   11. 
12.   2 – access(“ENAME”=U’Mike’)  alter session set nls_comp=’LINGUISTIC’;
alter session set nls_sort=’SCHINESE_PINYIN_M’;
之后再查看执行计划,得到结果:
1.————————————————————————–  
2.| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |  3.————————————————————————–   4.|   0 | SELECT STATEMENT  |      |     1 |    46 |     3   (0)| 00:00:01 |  5.|*  1 |  TABLE ACCESS FULL| EMP  |     1 |    46 |     3   (0)| 00:00:01 |  6.————————————————————————–   7. 
8.Predicate Information (identified by operation id):  9.—————————————————   10. 
11.   1 – filter(NLSSORT(“ENAME”,’nls_sort=”SCHINESE_PINYIN_M”’)=HEXTORAW  12.              (‘0230021B022301FE0000020202020007020202’) )  可以看到,现在走全表扫描了。
接下来,如果创建如下的索引
create index emp_ename_idx_nlssort on emp(nlssort(ename,’NLS_SORT=SCHINESE_PINYIN_M’));
再查看执行计划,发现又走索引emp_ename_idx_nlssort了。
1.—————————————————————————————————–  
2.| Id  | Operation                   | Name                  | Rows  | Bytes | Cost (%CPU)| Time     |  3.—————————————————————————————————–   4.|   0 | SELECT STATEMENT            |                       |     1 |    46 |     2   (0)| 00:00:01 |  5.|   1 |  TABLE ACCESS BY INDEX ROWID| EMP                   |     1 |    46 |     2   (0)| 00:00:01 |  6.|*  2 |   INDEX RANGE SCAN          | EMP_ENAME_IDX_NLSSORT |     1 |       |     1   (0)| 00:00:01 |  7.—————————————————————————————————–   8. 
9.Predicate Information (identified by operation id):  10.—————————————————   11. 
12.   2 – access(NLSSORT(“ENAME”,’nls_sort=”SCHINESE_PINYIN_M”’)=HEXTORAW(‘0230021B022301FE000  13.              0020202020007020202’) )

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/462887.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月8日 04:12:37
下一篇 2025年11月8日 04:17:38

相关推荐

  • 了解AJAX所需的参数是什么?

    深入了解AJAX的参数:您需要掌握哪些参数? 引言: 在现代Web开发中,AJAX(Asynchronous JavaScript and XML)是一个被广泛使用的技术,它可以实现异步加载数据,从而提升用户体验。AJAX的核心是通过发送HTTP请求与服务器进行交互,并将响应的数据动态地展示在页面上…

    2025年12月24日
    000
  • 深入解析AJAX参数:它们的重要性何在?

    AJAX的参数详解:为什么它们如此重要? 随着Web应用的复杂性不断增加,用户对于实时响应和无刷新的交互体验的需求也越来越高。在这样的背景下,AJAX(Asynchronous JavaScript and XML)成为了前端开发中的必备技术。它可以实现异步数据交互,从服务器请求数据并将其无缝地展示…

    2025年12月24日
    000
  • 提升网页功能的关键:精通AJAX参数的运用

    学习AJAX参数的关键:掌握这些参数能让您的网页更强大,需要具体代码示例 随着互联网的发展,Ajax(Asynchronous JavaScript and XML)技术已经成为Web开发中不可或缺的一部分。它通过在不刷新整个页面的情况下与服务器进行异步通信,使网页更加流畅和响应快速。而要使用Aja…

    2025年12月24日
    000
  • safari如何关闭html5_Safari浏览器关闭HTML5支持【关闭】

    Safari无法全局关闭HTML5支持,但可针对性禁用其子功能:一、在“设置→Safari→网站→自动播放”中阻止所有网站自动播放;二、访问safari://features启用Canvas Script Blocking或Lockdown Mode Enhancements以削弱Canvas指纹;…

    2025年12月23日
    000
  • xcode怎么运行html_xcode运行html步骤【指南】

    Xcode不直接运行HTML,但可通过创建iOS项目并使用WKWebView加载本地或远程HTML文件实现预览;2. 添加HTML文件到项目后,在ViewController中导入WebKit,创建WKWebView实例并加载文件;3. 若仅需预览,可用Xcode编辑HTML后直接用Safari打开…

    2025年12月23日
    000
  • java怎么编译运行.html_java编译运行.html方法【教程】

    Java程序的编译运行与HTML无关,需使用JDK。1. 编写HelloWorld.java文件;2. 命令行执行javac HelloWorld.java生成.class文件;3. 执行java HelloWorld运行程序。注意:HTML是网页标记语言,不能直接运行Java代码,勿将二者混淆。确…

    2025年12月23日
    000
  • html文档中含有java怎么运行_html含java运行方法【教程】

    现代浏览器不支持Java Applet,推荐通过JavaScript调用Java后端服务或使用WebAssembly运行Java代码。 如果您在HTML文档中嵌入了Java代码,但发现无法正常运行,这通常是因为现代浏览器不再支持Java小程序(Applet)或相关插件。以下是几种实现HTML中Jav…

    2025年12月23日
    000
  • 怎么运行html的applet小程序_运行html applet小程序步骤【指南】

    现代浏览器已不再默认支持Java Applet,需通过安装JRE、启用插件、使用支持NPAPI的旧版浏览器(如Firefox 52.9 ESR)、调整Java安全级别至中,并将网站添加到例外站点列表方可运行。 如果您在尝试运行HTML中的Applet小程序时遇到问题,可能是因为现代浏览器已不再默认支…

    2025年12月23日
    000
  • VS Code插件自动排序class,HTML页面整齐到爆!

    使用VS Code插件可自动排序HTML中class属性值以提升代码整洁度。首先安装Auto Rename Tag确保标签同步,再通过Sort Attributes按字母序排列属性;接着配置Prettier实现保存时自动格式化,最后利用Custom CSS Class Sorter自定义类名排序规则…

    2025年12月23日
    000
  • 使用BeautifulSoup和JSON有效抓取动态加载的网页表格数据

    本教程旨在解决使用BeautifulSoup抓取网页表格时,因数据动态加载导致部分内容缺失的问题。通过分析网页背后的API请求,直接获取并解析JSON数据源,再结合BeautifulSoup提取的HTML结构信息,最终实现完整且准确的数据抓取。文章将提供详细的代码示例和实现步骤。 理解网页动态内容与…

    2025年12月23日
    400
  • 解决BeautifulSoup爬取网页表格中动态内容缺失问题

    本文旨在解决使用BeautifulSoup爬取网页表格时,因部分数据通过JavaScript动态加载导致内容缺失的问题。通过详细分析Oracle云定价页面的案例,教程将指导读者如何识别并获取隐藏在JSON API中的动态数据,并将其与BeautifulSoup解析的静态HTML内容有效整合,最终构建…

    2025年12月23日
    000
  • Java GUI在Web部署中的挑战与现代解决方案

    本文旨在澄清Java Web Start(JWS)在Web页面内运行GUI的常见误解,指出JWS用于本地应用启动而非嵌入式Web GUI。文章将探讨JWS的局限性及其被Oracle弃用的原因,介绍OpenWebStart作为其开源替代方案,并重点推荐Vaadin Flow作为使用纯Java构建真正W…

    2025年12月22日
    000
  • Java GUI Web部署策略与现代替代方案

    本文旨在澄清Java GUI应用在Web页面中直接运行的常见误区,特别是关于Java Web Start (JWS) 的作用与局限性。我们将探讨JWS的实际工作机制、其被Oracle废弃的原因,并介绍OpenWebStart作为现有JWS应用的替代方案。此外,文章将重点推荐Vaadin Flow等现…

    2025年12月22日
    300
  • HTML表单如何实现白名单功能?怎样只允许授权用户?

    要实现%ignore_a_1%的白名单功能并确保只有授权用户操作,核心答案是必须依赖后端服务器进行严格的身份认证、会话管理、授权检查和数据验证,前端仅能提供用户体验层面的初步提示而不能保障安全;具体而言,首先通过用户身份认证(如用户名/密码或oauth)确认用户身份,服务器创建会话并返回标识符,后续…

    2025年12月22日
    000
  • 表单中的ERP怎么连接?如何对接企业资源计划系统?

    将表单数据连接到erp系统的核心是打通数据流,确保信息能从前端无缝流入企业核心系统,主要通过api接口集成、中间件/ipaas、文件导入导出和rpa四种方式实现;其中api集成因其实时性高、安全性好、可扩展性强,成为现代系统的首选方案,尤其适用于支持开放api的erp系统;当业务涉及多系统复杂集成时…

    2025年12月22日
    100
  • HTML如何实现文本加密?怎么隐藏敏感内容?

    纯前端技术无法真正加密或安全隐藏敏感内容,因为html、css和javascript均在客户端运行,源代码和数据可被用户通过开发者工具轻易查看;2. 所谓“隐藏”如display: none、hidden属性或javascript移除dom,仅是视觉上的屏蔽,数据仍存在于页面中;3. 真正的安全必须…

    2025年12月22日
    000
  • 表单中的智能合约怎么集成?如何自动执行表单条款?

    要实现表单数据与智能合约的精准匹配及条款的自动执行,核心在于通过后端服务进行数据类型转换、多层校验并严格遵循abi规范调用合约;智能合约通过内置条件逻辑或借助chainlink keepers等自动化服务实现触发执行;需应对gas成本、安全风险、异步体验和预言机依赖等挑战,采用layer 2、元交易…

    2025年12月22日
    000
  • HTML文件的基本概念是什么?如何打开HTML格式文件?

    打开html文件最直接的方法是使用网页浏览器,如chrome、firefox、edge或safari,因为html是一种用于定义网页结构和内容的标记语言,需通过浏览器解析并渲染成可视界面。1. 双击文件:系统通常已将html文件与默认浏览器关联,双击即可在默认浏览器中打开并显示网页内容。2. 右键“…

    2025年12月22日 好文分享
    000
  • 想提升IT技能?哪些含金量高的认证值得考?

    it职业发展:高含金量认证助您成功 想在IT领域提升竞争力?选择合适的认证至关重要。本文推荐几项国内外认可度高的IT认证,助您在职业道路上更进一步。 热门认证推荐: 1. 高级软件设计师(软考高级): 国内IT领域含金量最高的认证之一。涵盖软件工程、项目管理及计算机基础知识。证明您在软件设计和开发方…

    2025年12月22日
    000
  • 如何创建一个日期对象,它包括哪些参数?

    Date 对象是 JavaScript 语言中内置的数据类型。 Date 对象是使用新的 Date( ) 创建的,如下所示。 创建 Date 对象后,您可以使用多种方法对其进行操作。大多数方法仅允许您使用本地时间或 UTC(通用或 GMT)时间获取和设置对象的年、月、日、小时、分钟、秒和毫秒字段。 …

    2025年12月21日
    000

发表回复

登录后才能评论
关注微信