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)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Java函数式编程如何与Hadoop或Spark框架集成实现并行计算?
上一篇 2025年11月8日 04:12:40
从 DeiT-B 到 DeiT-S,块结构化剪枝在深度 ViTs上 的应用 !
下一篇 2025年11月8日 04:12:53

相关推荐

  • C++程序创建一个带有参数和返回值的函数

    任何使用函数的编程语言都具有更简单、更模块化并且在调试时更容易更改的代码。函数是模块化代码中非常有用的组件。函数接受参数和输出结果的能力。函数不一定需要接受输入并始终产生结果。在许多情况下,函数只接受一些输入并且不返回任何内容。不总是回应,也不会容忍争议。本文将解释如何创建使用函数的 C++ 程序,…

    2026年5月10日
    000
  • php实现哪些功能

    PHP是一种通用脚本语言,可用来实现广泛的功能,包括:动态Web开发:生成响应用户请求的动态 веб页面。内容管理系统(CMS):构建允许用户管理网站内容的CMS。电子商务:开发具有购物车、订单处理和支付网关集成的电子商务网站。服务器端编程:编写命令行脚本和工具。文件操作:创建、读取、写入和删除文件…

    2026年5月10日
    000
  • SQL查询:精确判断事件过期,结合日期与时间列

    本文旨在解决数据库中事件过期判断不精确的问题,特别是当事件的过期日期和时间分别存储在不同列时。我们将探讨两种主流的sql查询策略:一种是利用逻辑运算符`or`和`and`进行分情况判断,另一种是通过合并日期和时间列为单一时间戳进行直接比较。文章将详细阐述每种方法的实现方式、适用场景及相关注意事项,确…

    2026年5月10日
    100
  • HTML表单如何实现白名单功能?怎样只允许授权用户?

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

    2026年5月10日
    800
  • 如何用C#实现数据库的跨平台迁移?使用EF Core工具?

    使用EF Core实现跨平台数据库迁移,需定义实体与DbContext,通过动态配置不同数据库提供程序,利用EF Core CLI生成并应用迁移,结合Fluent API处理数据库差异,确保结构与数据兼容。 要实现数据库的跨平台迁移,C# 中最常用且高效的方式是使用 Entity Framework…

    2026年5月10日
    000
  • Python连接MySQL 5.1:克服旧版认证与字符集兼容性挑战

    本教程详细阐述了如何使用Python 3和mysql.connector库成功连接到老旧的MySQL 5.1数据库。文章重点介绍了解决旧版认证协议和字符集兼容性问题的关键配置,特别是use_pure=True和charset=’utf8’的重要性,并提供了可运行的代码示例。同…

    2026年5月10日
    000
  • php代码如何实现数据统计_php代码制作报表分析的方法

    使用PHP结合数据库查询与逻辑处理可实现数据统计分析及报表展示。首先通过SQL聚合函数在数据库层面处理数据,利用PDO连接MySQL执行如按日统计订单的查询,并将结果用PHP存储为数组,最终渲染至HTML表格呈现基础报表。其次借助PHPOffice/PhpSpreadsheet类库,经Compose…

    2026年5月10日
    000
  • xcode怎么运行html_xcode运行html步骤【指南】

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

    2026年5月10日
    000
  • 想提升IT技能?哪些含金量高的认证值得考?

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

    2026年5月10日
    000
  • 什么是资产代币化(Asset Tokenization)?它如何将现实世界资产带入区块链?

    资产代币化是通过区块链将房产、股票等实体资产权益转化为可分割的数字代币。首先选择目标资产并由合规机构确权估值,随后在链上发行对应代币并通过智能合约绑定权益比例,实现自动化分红与转让。为确保真实性,引入第三方审计和去中心化预言机同步链下数据,资金流由托管账户与链上地址联动记录,提升透明度。代币化降低投…

    2026年5月10日
    000
  • MySQL、PostgreSQL、SQL Server和Oracle中空字符串、数字0和NULL占用空间有何区别

    不同数据库系统中空字符串、数字0和NULL的存储空间差异 本文比较了MySQL InnoDB、PostgreSQL、SQL Server和Oracle数据库中,空字符串(”)、数字0和NULL值在磁盘上所占用的空间大小。 MySQL InnoDB存储引擎: 整型字段: NULL: 不占用…

    2026年5月10日
    000
  • html文档中含有java怎么运行_html含java运行方法【教程】

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

    2026年5月10日
    000
  • php主要运用哪些东西

    PHP 是一种通用脚本语言,主要用于 Web 开发,包括创建动态网页、网站框架和内容管理系统。此外,它还支持 Web 服务(RESTful 和 SOAP)、数据库操作、命令行脚本、桌面应用程序和图像处理。 PHP 语言的主要应用 PHP(超文本预处理器)是一种广泛应用的通用脚本语言,主要用于 Web…

    2026年5月10日
    100
  • 了解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日
    300
  • 提升网页功能的关键:精通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日
    100
  • 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的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

发表回复

登录后才能评论
关注微信