検索
ホームページデータベースmysql チュートリアル深度揭露Oracle索引使用中的限制

当用户从数据表中查询数据时,Oracle数据库提供了两种查询的方式。一是从表中读取每一行,就是大家常说的全表扫描;二是通过ROWI

众所周知,索引确实可以提高数据库的性能。但是大家对索引的使用限制却一口未提。笔者认为对于数据库索引的作用,应该分两面看。除了肯定其对数据库性能带来的正面影响外,还需要认识到其可能带来的负面影响。只有如此,数据库管理员才能够在正确的场合使用正确的索引。要知道有时候一个错误的索引可能引发死锁,并导致数据库性能的急剧下降或进程终止;而如果数据库管理员能够做出一个正确的判断的话,那么可以使那些本来要运行几个小时甚至一天的进程在几分钟之内就能够完成。所以这两个差距是一个天上、一个地下。故笔者希望通过这篇文章能够让各位读者了解索引在使用过程中的限制,了解索引并不是万能的。

一、索引对数据库性能的影响跟数据选择性直接挂钩。

当用户从数据表中查询数据时,Oracle数据库提供了两种查询的方式。一是从表中读取每一行,就是大家常说的全表扫描;二是通过ROWID一此读取一行。当表中记录比较多的时候,很明显第二种方式能够更快的定位记录内容。而索引其实就是建立在这个查询原理之上的。如现在某个表中有300多万条记录,而现在用户可能只需要了解其中的10条记录信息。此时如果使用索引标识读取的块,则可以执行比较少的I/O,数据库系统会很快找到用户所需要的内容。而如果没有使用索引的话,则需要读取表中所有的块。

如果在这个表中加入了索引,那么到底对数据库的性能影响有多大呢?这个就不好说了,因为其跟很多因素相关。如跟数据选择性直接相关。如果用户的数据非常具有选择性,则表中家功能只有很少的行匹配索引值,则Oracle将能够快速查询匹配所引值得ROWID的索引,并且可以快速查询少量的相关表快。如还是上面这个表中,其如果存储有某个市的所有常住人口信息,其中身份证号码肯定是少不了的。如此时用户想根据身份证号码来查询某个人的信息时,那么数据库能够在很短的时间内给出响应。这主要是因为用户提供的数据非常具有选择性,基本上跟数据库中的索引值是一一对应的。而如果用户想通过出身年月信息来查询信息的话,则其数据库反映的速度就会比较慢了。

可见索引对数据库性能的影响直接跟数据的选择性挂钩。这对于数据库管理员设计索引时很有启发性。如数据库管理员在设计索引时,最好能够选择哪些具有唯一性的字段或者重复性比较少的字段。如此的话,索引对于数据库性能来说才有比较大的价值。

二、索引效果跟数据库中记录的具体存储位置相关。

还是上面这张表中,如果现在用户想查找年龄超过100岁的老人,要对他们去进行慰问。假设现在符合这个条件的人只有10人。那么此时索引对数据库性能会有怎么样的影响呢?此时显然数据非常具有选择性,但是并不一定索引能够起到很好的效果。这还要看其具体存储的位置。如果这十条记录在硬盘中存储的物理位置比较近,如可能在同一个扇区之内,则此时索引对于数据库性能的影响就会比较大,,能够在最短时间内找到符合条件的数据。但是如果相关的行在表中存储的位置并不互相靠近,则这个索引的效果就会逐渐减少。因为如果匹配索引值的数据分散在硬盘上的多个酷爱时,则必须从表中选择多个单独的块以满足查询。

数据库管理员对于这一点要特别注意。因为此时如果数据库管理员查用了索引的话,那么很可能是画蛇添足。笔者建议,当数据库管理员发现数据分散在表的多个块的时候,最好是不要使用索引,而是执行全表扫描。此时执行扫描反而会比执行索引的效率更高。因为在执行全表扫描的时候,Oracle数据库系统会使用多块读取以加速扫描表。而如果采用索引的话,则其读取数据时是单块读取的。而由于数据存储在多个块中,所以其读取的速度反而会更慢。

由此可见,Oracle数据库管理员在数据库设计与日常维护中,也要想办法能够让数据尽量存储在临近的位置。如尽量减少在同一个服务器中不要部署不同的应用服务,防止硬盘产生过多的磁盘碎片;如需要采用多块硬盘的话,则最好通过表空间把类似的表放在同一个表空间中,从而让相关的行在表zhognd存储位置尽量靠近,以提高索引的使用效果。也就是说,数据库管理员在使用索引的时候,为表中的字段建立了索引这只是其工作的第一步。在后续数据库维护与调整的过程中,仍然要注意数据存储位置对索引的影响。

linux

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
MySQL:初心者が習得するための必須スキルMySQL:初心者が習得するための必須スキルApr 18, 2025 am 12:24 AM

MySQLは、初心者がデータベーススキルを学ぶのに適しています。 1.MySQLサーバーとクライアントツールをインストールします。 2。selectなどの基本的なSQLクエリを理解します。 3。マスターデータ操作:テーブルを作成し、データを挿入、更新、削除します。 4.高度なスキルを学ぶ:サブクエリとウィンドウの関数。 5。デバッグと最適化:構文を確認し、インデックスを使用し、選択*を避け、制限を使用します。

MySQL:構造化データとリレーショナルデータベースMySQL:構造化データとリレーショナルデータベースApr 18, 2025 am 12:22 AM

MySQLは、テーブル構造とSQLクエリを介して構造化されたデータを効率的に管理し、外部キーを介してテーブル間関係を実装します。 1.テーブルを作成するときにデータ形式と入力を定義します。 2。外部キーを使用して、テーブル間の関係を確立します。 3。インデックス作成とクエリの最適化により、パフォーマンスを改善します。 4.データベースを定期的にバックアップおよび監視して、データのセキュリティとパフォーマンスの最適化を確保します。

MySQL:説明されている主要な機能と機能MySQL:説明されている主要な機能と機能Apr 18, 2025 am 12:17 AM

MySQLは、Web開発で広く使用されているオープンソースリレーショナルデータベース管理システムです。その重要な機能には、次のものが含まれます。1。さまざまなシナリオに適したInnodbやMyisamなどの複数のストレージエンジンをサポートします。 2。ロードバランスとデータバックアップを容易にするために、マスタースレーブレプリケーション機能を提供します。 3.クエリの最適化とインデックスの使用により、クエリ効率を改善します。

SQLの目的:MySQLデータベースとの対話SQLの目的:MySQLデータベースとの対話Apr 18, 2025 am 12:12 AM

SQLは、MySQLデータベースと対話して、データの追加、削除、変更、検査、データベース設計を実現するために使用されます。 1)SQLは、ステートメントの選択、挿入、更新、削除を介してデータ操作を実行します。 2)データベースの設計と管理に作成、変更、ドロップステートメントを使用します。 3)複雑なクエリとデータ分析は、ビジネス上の意思決定効率を改善するためにSQLを通じて実装されます。

初心者向けのMySQL:データベース管理を開始します初心者向けのMySQL:データベース管理を開始しますApr 18, 2025 am 12:10 AM

MySQLの基本操作には、データベース、テーブルの作成、およびSQLを使用してデータのCRUD操作を実行することが含まれます。 1.データベースの作成:createdatabasemy_first_db; 2。テーブルの作成:createTableBooks(idintauto_incrementprimarykey、titlevarchary(100)notnull、authorvarchar(100)notnull、published_yearint); 3.データの挿入:InsertIntoBooks(タイトル、著者、公開_year)VA

MySQLの役割:WebアプリケーションのデータベースMySQLの役割:WebアプリケーションのデータベースApr 17, 2025 am 12:23 AM

WebアプリケーションにおけるMySQLの主な役割は、データを保存および管理することです。 1.MYSQLは、ユーザー情報、製品カタログ、トランザクションレコード、その他のデータを効率的に処理します。 2。SQLクエリを介して、開発者はデータベースから情報を抽出して動的なコンテンツを生成できます。 3.MYSQLは、クライアントサーバーモデルに基づいて機能し、許容可能なクエリ速度を確保します。

MySQL:最初のデータベースを構築しますMySQL:最初のデータベースを構築しますApr 17, 2025 am 12:22 AM

MySQLデータベースを構築する手順には次のものがあります。1。データベースとテーブルの作成、2。データの挿入、および3。クエリを実行します。まず、createdAtabaseおよびcreateTableステートメントを使用してデータベースとテーブルを作成し、InsertINTOステートメントを使用してデータを挿入し、最後にSelectステートメントを使用してデータを照会します。

MySQL:データストレージに対する初心者向けのアプローチMySQL:データストレージに対する初心者向けのアプローチApr 17, 2025 am 12:21 AM

MySQLは、使いやすく強力であるため、初心者に適しています。 1.MYSQLはリレーショナルデータベースであり、CRUD操作にSQLを使用します。 2。インストールは簡単で、ルートユーザーのパスワードを構成する必要があります。 3.挿入、更新、削除、および選択してデータ操作を実行します。 4. Orderby、Where and Joinは複雑なクエリに使用できます。 5.デバッグでは、構文をチェックし、説明を使用してクエリを分析する必要があります。 6.最適化の提案には、インデックスの使用、適切なデータ型の選択、優れたプログラミング習慣が含まれます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。