MXPA97005043A - Indices generalizados de claves - Google Patents

Indices generalizados de claves

Info

Publication number
MXPA97005043A
MXPA97005043A MXPA/A/1997/005043A MX9705043A MXPA97005043A MX PA97005043 A MXPA97005043 A MX PA97005043A MX 9705043 A MX9705043 A MX 9705043A MX PA97005043 A MXPA97005043 A MX PA97005043A
Authority
MX
Mexico
Prior art keywords
index
key
tables
question
conditions
Prior art date
Application number
MXPA/A/1997/005043A
Other languages
English (en)
Other versions
MX9705043A (es
Inventor
Prakash Sundaresan
Original Assignee
Informix Software Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US08/677,490 external-priority patent/US5870747A/en
Application filed by Informix Software Inc filed Critical Informix Software Inc
Publication of MX9705043A publication Critical patent/MX9705043A/es
Publication of MXPA97005043A publication Critical patent/MXPA97005043A/es

Links

Abstract

La presente invención se refiere aíndices de claves generalizadas, hace posible que una primera tabla de una base de datos correlacionada, sea indexada, usando una clave deíndice y condiciones deíndice, en que cualquiera o ambas de la clave deíndice y las condiciones deíndice pueden hacer referencia a múltiples tablas de la base de datos o pueden ser una expresión que usa campos de una o más tablas además de la primera tabla. Losíndices de claves generalizadas asocian directamente los valores clave deíndice generalizados con los identificadores de registro de los registros de la primera tabla, habilitando asíel almacenamientoy la recuperación de datos eficientes.

Description

ÍNDICES GENERALIZADOS DE CLAVES La invención se refiere, generalmente, a sistema de bases de datos correlacionados y, más particularmente, a la formación de índices en sistemas de base de datos correlacionados. Los usuarios perciben una base de datos correlacionada como una colección de tablas, cada una de las cuales dispone de datos para productos y atributos de los productos, en hileras y columnas; una hilera de una tabla corresponde a un producto (denominado como un registro) ; una columna de una tabla corresponde a un atributo del producto (denominado como un campo) . Un registro de tabla puede generalmente ser identificado por un identificador de registro (RID) , que indica la página y el desplazamiento dentro de la página donde el registro se almacena. Las Figuras 1 a 3 ilustran ejemplos de tablas en una base de datos correlacionada. A los datos almacenados en las tablas se puede tener acceso usando índices, tal como aquéllos ilustrados en las Figuras 4 a 6, que ayudan en el acceso de datos proporcionando un ordenamiento lógico de los registros de la tabla. La Figura 4 ilustra un índice convencional 400 en la tabla CUST 100 de la Figura 1, que usa el nombre 410a del cliente como la clave del índice. El índice 400 suministra un ordenamiento alfanumérico de los registros de la tabla CUST 100 por nombres de clientes 120 y asocia cada nombre 410a con los identificadores 410b de registro para los registros de la tabla que tienen el nombre del cliente en su campo cust_name 120. Una pregunta de los números de teléfono de los clientes nombrados Smith, normalmente será procesada buscando en el índice 400 una entrada que tiene el valor de clave "Smith" 440a, que usa el identificador 440b del registro asociado para recuperar un registro en la tabla CUST 100, y extraer datos en el campo cust_phone 140 del registro recuperado. Debido a que el índice 400 se ordena por nombres de clientes, la búsqueda del índice es más rápida que la búsqueda lineal de la tabla CUST 100 que se requiere sin un índice. Los índices pueden ser realizados usando varios métodos, tal como el de B-Trees (Árboles B) y de funciones de reagrupación. Como se ejemplifica por el índice 400, las entradas de índice tienen generalmente dos atributos: un valor clave de índice e identificadores de registro de los registros de la tabla. Una clave de índice generalmente es un campo o una combinación de campos de una tabla y cada entrada de índice asocia un valor clave con identificadores de registro de los registros de la tabla. Los índices convencionales son una tabla sencilla, que asocia los valores clave basados en los campos de la tabla con identificadores de registro de los registros de esa misma tabla. El índice 400 de la Figura 4 es un ejemplo de un índice de tabla sencilla. Varios tipos de índices de tabla sencilla existen. La Figura 7 ilustra un ejemplo de un índice de "columna virtual", creado definiendo la clave de índice como una expresión que usa uno o más campos de un registro de tabla. Por ejemplo, para ordenare los registros de la tabla de pedidos ("ORD table") de la Figura 2, por precio que incluye el descuento, se crea un índice de columna virtual, usando la clave de índice (ORD.price - ORD.discount) . Otro tipo de índice de tabla sencilla es un "índice parcial" ("partial Índex") , que indexa sólo esos registros de tabla que satisfacen una condición especificada. Por ejemplo, la Figura 8 ilustra un índice que asocia valores para fecha de pedidos (ORD. date) , sólo con los identificadores de registro de los registros de la tabla que tienen un precio de al menos $50,000.00. En sistemas de base de datos correlacionados, un índice puede también ser una tabla múltiple, que usa campos de una primera tabla en su clave de índice, y asocia los valores de clave de índice con identificadores de registro de los registros de una segunda tabla. Los índices de múltiples tablas se denominan generalmente como índices de conjunto. Las Figuras 4 a 6 ilustran juntas una realización de un índice para recuperar registros de índice basados en el nombre del cliente, creados en la tabla ÍTEM (productos) 300 (Figura 3) , que usa el nombre del campo 120 de la tabla CUST 100 como una clave de índice (CUST.cust_name) . Como se muestra, este índice tiene tres niveles, El primer nivel (índice 400, Figura 4) asocia valores para CUS . cust_name 410a con identificadores de registro de los registros de la tabla CUST 410b; el segundo nivel (índice 500, Figura 5) asocia valores para CUST.cust_no 510a con identificadores de registro de los registros de la tabla ORD 510b que tienen el mismo valor para ORD.cust_no; y el tercer nivel (índice 600, Figura 6) asocia valores para ORD.ord_no 610a con los identificadores de registro de los registros de la tabla ÍTEM 610b que tienen el mismo valor para el ITEM.ord_no. Los índices 400-600 ayudan en recuperar registros de productos que corresponden a un nombre de cliente. Por ejemplo, para recuperar registros de productos para un cliente Smith, el índice 400 se usa para recuperar el CUST.cust_no (1002) de los registros CUST que corresponden a Smith (002) ; el índice 500 se usa para recuperar el 0RD.ord_no (002,003) de los registros ORD (101, 102) que corresponden a CUST.cust_no (1002); y finalmente, el índice 600 se usa para recuperar los registros ÍTEM (201, 202, 203) que corresponden a 0RD.ord_no (002, 003). Aunque tales índices de múltiples tablas simplifi-can el acceso de datos en sistemas de base de datos córrela-cionados, la indexación convencional para bases de datos correlacionados tiene limitaciones. Por ejemplo, un índice convencional que asocia valores clave de campos de una primera tabla con identificadores de registro de los registros de una segunda tabla que tiene generalmente de más de un nivel, como se ilustra por las Figuras 4 a 6. Una consecuencia de múltiples niveles en índices de tablas múltiples es que tales índices requieren más espacio de memoria que los índices de tabla sencilla. Otra consecuen-cia de los niveles múltiples es que se requiere más proceso para manejar las preguntas. Por ejemplo, la recuperación de registros de productos que corresponden a un nombre de cliente Smith requiere múltiples etapas de proceso. Compendio En general, en un aspecto, la invención caracteriza un método llevado a cabo por computadora para crear un índice para una primera tabla en una base de datos correlacionada de múltiples tablas, basada en una clave de índice y condiciones de índice determinando los valores de la clave de índice, en que si la clave de índice hace referencia a tablas además de la primera tabla, el método además comprende la recuperación de datos de las otras tablas, para determinar los valores de las claves de índice; asociar cada valor de clave de índice determinado con identificadores de registro de los registros de la primera tabla, que satisfacen lasa condiciones de índice, en que si las condiciones de índice hacen referencia a tablas diferentes de la primera tabla, el método además comprende recuperar los datos de las otras tablas para determinar los identificadores de registro asociados; y almacenar los valores de claves de índice y los identificado-res de registro asociados en un índice. Las modalidades de la invención pueden incluir una o más de las siguientes características. La clave de índice hace referencia al menos a una segunda tabla y una tercera tabla. Las condiciones de índice se refieren al menos a una segunda tabla y una tercera tabla. La clave de índice es una expresión que hace referencia al menos a una segunda tabla. En otro aspecto, la invención caracteriza un método realizado por computadora para crear un índice para la primera tabla en una base de datos correlacionada, de múltiples tablas, basada en una clave de índice, determinando los valores clave de índice, en que esta clave de índice comprende una expresión que hace referencia al menos a una segunda tabla; asociar cada valor de clave determinado con identificadores de registro de los registros de la primera tabla; y almacenar los valores de claves de índice y los identificadores de registro asociados en un índice. En otro aspecto, la invención caracteriza un método, realizado por computadora, para determinar la aplicabilidad de un índice para procesar una pregunta en una base de datos correlacionada, de múltiples tablas, en que el índice hace una tabla de índices basada en una claves de índices y condiciones de índices, la pregunta se basa en las condiciones de la pregunta con referencia a un conjunto de tablas de preguntas y cada una de las tablas son tablas de base de datos correlacionada, de múltiples tablas. Este método comprende determinar si la tabla de índice es una de las tablas de preguntas; determinar si las condiciones de índice son menores o igualmente restrictivas en comparación con las condiciones de las preguntas; y determinar el índice que se va a aplicar para procesar la pregunta si la tabla de índice es una de las tablas de preguntas y las condiciones del índice son menores o igualmente restrictivas en comparación con las condiciones de la pregunta. Modalidades de la invención pueden incluir un método el cual determina si las condiciones del índice son menos o igualmente restrictivas en comparación con las condiciones de las preguntas, y comprende determinar si cada condición de índice es satisfecha por al menos una condición de pregunta. En otro aspecto, la invención caracteriza un método realizado por computadora de procesar una pregunta en un conjunto de tablas de preguntas en una base de datos correlacionada, recuperando un índice que comprende entradas de índice que tienen valores clave de índice y los identifi-cadores de registro asociados de los registros de una primera tabla de preguntas en un conjunto de tablas de preguntas, en que la asociación entre las entradas del índice y los identificadores de registro asociados se basan en cuando menos una segunda tabla de preguntas y una tercera tabla de preguntas en un conjunto de tablas de preguntas; determinar un valor clave de índice basado en las preguntas; determinar una entrada de índice que corresponde a un valor de clave de índice determinado; y recuperar los registros de la primera tabla de preguntas, basados en los identificadores de registro asociados de la entrada de índice determinada. En otro aspecto, la invención caracteriza un método, realizado por computadora, de procesar una pregunta en un conjunto de tablas de preguntas en una base de datos correlacionada, recuperando un índice que comprende entradas de índice que tienen valores clave de índices e identificado-res de registro asociados de los registros de una primera tabla de preguntas en el conjunto de tablas de preguntas, en que los valores clave de índice se basan en una expresión que hace referencia a cuando menos una segunda tabla de preguntas en el conjunto de tablas de preguntas; determinar un valor de clave de índice basado en las preguntas; seleccionar una entrada de índice que corresponde al valor de clave de índice determinado; y recuperar registros de la primera tabla de preguntas, basada en la entrada de índice seleccionada.
En otro aspecto, la invención caracteriza un índice almacenado en un medio que se puede leer por un procesador, para habilitar a un procesador programable para ordenar registros de una primera tabla de una base de datos correla-cionada de múltiples tablas, basada en una clave de índice y condiciones de índice, este índice, que comprende los valores de la clave de índica y los identificadores de registro asociados, para registros de la primera tabla que satisfacen las condiciones del índice, donde al menos una de la clave de índice y las condiciones de índice hacen referencia a una segunda y tercera tabla de bases de datos correlacionados de múltiples tablas. En otro aspecto, la invención caracteriza un índice almacenado en un medio que se puede leer por un procesador, para hacer posible que un procesador programable ordene registros de una primera tabla de una base de datos correlacionada de múltiples tablas, basada en una clave de índice, este índice, comprende los valores clave de índice y los identificadores de registro asociados para los registros de la primera tabla, donde la clave de índice es una expresión que hace referencia a cuando menos una segunda tabla de base de datos correlacionada de múltiples tablas. Las ventajas de la invención incluyen una o más de las siguientes. El sistema generalizado que indexa las claves puede ser llevado a cabo en un solo nivel, logrando el almacenamiento eficiente y habilitando el proceso eficiente de preguntas. Los índices de claves generalizados también habilitar indexar en una variedad de claves de índice, que incluyen, por ejemplo, las expresiones que usan campos de más de una tabla. Asimismo, los índices de claves generalizados son suficientemente flexibles para lograr una variedad de formatos de índices, que incluyen los índices convencionales de una tabla sencilla. Los sistemas de bases de datos correlacionadas pueden ser adaptados fácilmente para crear y manejar tanto índices clave generalizados como índices convencionales . Objetos y ventajas adicionales de la invención serán señaladas en la descripción que sigue y en parte serán obvios de la descripción o se pueden aprender por la práctica de la invención. Los objetos y ventajas de la invención se pueden realizar y obtener por medio de las herramientas y combinaciones particularmente señaladas en las reivindicaciones. Breve Descripción de los Dibujos Los dibujos acompañantes, que se incorporan y constituyen parte de la especificación, ilustran esquemáticamente la invención y, junto con la descripción general dada anteriormente y la descripción detallada que sigue, servirá para explicar los principios de la invención.
Las Figuras 1 a 3 ilustran tablas de una base de datos correlacionados. Las Figuras 4 a 8 ilustran índices. La Figura 9 es un diagrama de flujo de un método para crear un índice generalizado de claves. Las Figuras 10 a 12 ilustran índices. La Figura 13 es un diagrama de flujo de un método de determinar la capacidad de aplicación de un índice generalizado de claves. Las Figuras 14 y 15 ilustran índices. La Figura 16 muestra la aplicabilidad de los índices a preguntas dadas. Las Figuras 17 y 18 ilustran índices. La Figura 19 ilustra un sistema de proceso programable. Descripción de la Modalidad Preferida La invención proporciona un uso generalizado de formación de índices de sistemas de bases de datos correlacionados. Los índices generalizados ("índices GK") de claves abarcan índices convencionales que incluyen índices de una sola tabla, tal como los índices de columna virtual e índices parciales, al igual que índices de múltiples tablas — y habilitan técnicas diferentes usadas en los índices convencionales que se van a combinar en un índice sencillo. Los índices GK además suministran capacidades aumentadas de crear los índices acostumbrados que se almacenan eficientemente y hacen posible el proceso eficiente de preguntas. En una modalidad, el índice GK se crea por un comando del usuario, que tiene el siguiente formato: CREAR UN ÍNDICE GK <index-name> (nombre del índice) EN <table-name> (nombre de tabla> (SELECCIONAR COMO CLAVE <key-list> (lista de claves) DESDE <other-table-list> (otra lista de tablas> DONDE <condition-list> ( lista de condiciones>) donde los parámetros son como sigue ; ¡ndex-name identifica el índice que se crea (nombre del índice): identifica la tabla cuyos registros se table-name (nombre de la tabla): están indexando incluye uno o más campos de una o key-list (lista de claves:) más tablas de la base de datos correlacionada incluye cada tabla, diferente de la tabla other-table-lisy (otras tablas de listas:) que corresponde al nombre de la tabla, que tiene un campo de referencia o en la lista de claves o la lista de condiciones. Si el índice que se define es un índice de una sola tabla, esta lista puede estar vacía. condition-list incluye cero ° más condiciones (lista de condiciones:) (expresiones) que se van a satisfacer. Esta lista puede estar vacía. Una modalidad crea un índice GK desde tal instrucción como si procesara una pregunta y almacenara los resultados . Por ej emplo , el formato general para crear un índice GK puede expresarse como la pregunta : SELECCIONAR <key-list>, table-name>.RID (<lista de claves> <nombre de tabla>.RID) DESDE <other-table-list>, table-name> (<otra tabla de listas>, <nombre de tabla>) DONDE <condition-list> (<lista de condiciones>) ORDENADA POR <order-list> (<lista de orden>) donde <nombre de tabla>.RID se refiere a los registros de tabla y <lista de orden> refleja generalmente los campos como se ordenan en la lista de claves. Los índices GK pueden ser usados para crear índices convencionales de una tabla, que incluyen los índices de columna virtual y los índices parciales. En una forma de realización que usa el formato anterior, los índices GK de una tabla se crean por instrucciones, tal como: CREAR ÍNDICE GK <index-name> (<nombre de índice>) EN <table-name> (<nombre de tabla>) (SELECCIONAR <key-list> COMO CLAVE (<lista de claves>) DONDE <condition-list> (<lista de condiciones>) que se puede expresar como la pregunta: SELECCIONAR: <key-list>, table-name>.RID (<lista de claves>, <nombre de tabla, >. RID) DESDE <table-name> (<nombre de tabla>) donde <condition-list> (<lista de condiciones>) orden por <order-list> (<lista de orden>) Así, por ejemplo, el índice estándar de una tabla, discutido con referencia a la Figura 4, que indexa la tabla CUST por nombre será creada por una instrucción, tal como: CREAR ÍNDICE GK Cust_Name_lndex EN CUST (SELECCIONAR CUST.cust ñame COMO CLAVE que puede ser expresado como la pregunta SELECCIONAR CUST-cust_name, CUST.RID DESDE CUST ORDEN POR CUST.cust_name El índice 700 de columna virtual , discutido antes con referencia a la Figura 7 , puede ser creado por la instrucción : CREAR ÍNDICE GK VCJndex identifica el índice que se crea EN ORD (SELECCIONAR (0RD.Price - ORD.discount) COMO CLAVE que se puede expresar como la pregunta : SELECCIONAR (ORD.price - ORD. discount) ORD.RID DESDE ORD ORDEN POR (ORD.price - ORD.discount) Similarmente, el índice parcial 800 , discutido con referencia a la Figura 8 , puede ser creado por : CREAR ÍNDICE GK Partialjndex EN ORD (SELECCIONAR QRD date COMO CLAVE DONDE ORD.price > 50 , 000 . 00 que se puede expresar como la pregunta : SELECCIONAR: ORD.date, ORD.RID DESDE ORD DONDE ORD.price > 50,000.00 ORDEN POR ORD.date Como se indicó anteriormente. los índices GK abarcan índices convencionales de una tabla. Estos índices GK pueden también ser de múltiples tablas. En procesar la pregunta que corresponde a un índice GK de múltiples tablas, se hace referencia a las tablas intermedias en la determinación de la asociación final de los valores claves del índice GK con los identificadores de registro de los registros de la tabla indexada, pero el índice GK almacena los resultados finales. Los métodos de procesar preguntas se han estudiado extensamente y se pueden usar una variedad de métodos para procesar una pregunta que corresponde a un comando de "Crear un índice GK". La Figura 9 es un diagrama de flujo que ilustra un método para crear un índice GK. Después de recibir un comando para crear un índice GK, GKI en la Tabla T (mencionada antes como <nombre de la tabla>) , usando una clave de índice K (mencionada antes como <lista de claves>) y las condiciones del índice {C} (mencionadas antes como <lista de condiciones;») (910) , los valores de la clave K de índice son determinados (920) . Para cada valor de la clave de índice, asociada, los identificadores de registro de la tabla T satisfacen las condiciones {C}. Los valores de la clave del índice y sus identificadores de registro asociados se almacenan como entradas de índice (940) . La determinación de los identificadores de registro asociados de los registros de la tabla T para un valor de clave de índice, se pueden mencionar en una tabla intermedia (una de las tablas en la <otras tablas de listas>) , además de T. Por ejemplo, si una tabla en la <otras tablas de listas> se menciona por la clave de índice o en la condición de {C}, los datos desde esa otra tabla serán necesarios ser recuperados. Sin embargo, si se hace referencia a tablas intermedias, el índice almacena el resultado del mapeo, correlacionando directamente un valor de clave de índice con los identificadores de registro asociados de los registros de la tabla T indexada. La Figura 10 muestra un índice GK 1000 que asocia los nombres de los clientes con los identificadores de registro de los registros de productos, que realizan la misma función como los índices de las Figuras 4-6. Como resultado de un comando, tal como: CREAR ÍNDICE GK custjtems EN ÍTEM (SELECCIONAR CUST.cust_name COMO CLAVE) DESDE CUST DONDE CUST.cust_.no = ORD.cust_.no Y ORD.ord:no = ITEM.ord:no ORDEN POR CUST.cust ñame la pregunta correspondiente : SELECCIONAR CUST.cust_name, ITEM.RID DESDE CUST, ORD, ÍTEM DONDE CUST.cust_no = ORD.cust_no Y ORD.ord_.no = ITEM.ord_no ORDEN POR CUST.cust_name se procesa, creando el índice GK 1000 de la Figura 10. Como el índice 400 de la Figura 4, el índice GK 1000 asocia nombres de clientes con identificadores de registro de los registros del producto. Sin embargo, como se muestra, el índice GK 1000 tiene sólo un nivel, los valores asociados directamente para los nombres de clientes desde la tabla CUST con los identificadores de registro de los registros de la tabla ÍTEM, eliminan la referencia a la tabla ORD.
Los índices convencionales de múltiples tablas, tal como los índices de las Figuras 4-6, tienen múltiples niveles que relacionan los registros intermedios a los valores claves asociados con los identificadores de registros de los registros de la tabla No sólo niveles múltiples resultan en requisitos de memoria mayores y tiempos de acceso más lentos, sino también dan lugar a algunas limitaciones en los tipos de índices que se pueden crear. Por ejemplo, los índices convencionales de múltiples niveles, múltiples tablas, no permiten que una clave de índice se base en campos de más de una tabla. En contraste, debido a que los índices GK tienen sólo un nivel, que asocia directamente los valores de clave del índice GK con los identificadores de registro de los registros de tabla, los usuarios tienen gran flexibilidad en determinar cómo la asociación es definida. Por ejemplo, una clave de índice GK se puede crear en una primera tabla, usando una clave de índice que incluye una expresión que usa uno o más campos de una segunda tabla. Se hace referencia a las tablas de las Figuras 1-3, para determinar clientes que tienen órdenes de compra sencillas con un costo total particular, el índice GK 1100 de la Figura 11 puede ser creado como sigue: CREAR UN ÍNDICE GK cust_expediture EN CUST (SELECCIONAR ((ORD.price - ORD.discount) * COMO CLAVE (1 + ORD.tax)) DESDE ORD DONDE ORD.cust no = CUST-cust no que se puede procesar como: SELECCIONAR ((ORD.price - ORD.discount) (1 + ORD.tax)), CUST.RID DESDE ORD, CUST DONDE ORD.cust_.no = CUST.cust_no Las claves de índice GK pueden también ser creadas en campos desde más de una tabla. Por ejemplo, el siguiente comando creará el índice GK 1200 de la Figura 12, que asocia una combinación de un nombre de cliente y una fecha de pedido con los identificadores de registro de los productos comprados en ese pedido: CREAR UN ÍNDICE GK cust-date-item EN ÍTEM (SELECCIONAR (CUST.cust_ ame, COMO CLAVE ORD.date) DESDE CUST, ORD DONDE CUST.cust_no = ord.cust_.no Y ORD.ord no = ITEM.ord no que puede ser creado por: SELECCIONAR (CUST.cust_name, ORD.date), ITEM.RID DE CUST, ORD, ÍTEM CUST.cust_no = ORD.cust_.no Y ORD.ord_no = ITEM.ord_.no ORDEN POR CUST.cust_name, ORD. date Estos ejemplos reflejan la flexibilidad del índice clave generalizado para crear los índices acostumbrados a las necesidades específicas del usuario. Para asegurar la exactitud continuad de un índice GK después de que los datos se agregan, suprimen o alteran en uña tabla a la cual se hace referencia para crear un índice GK, este índice GK debe ser actualizado para verificar sus entradas en la exactitud después que ha ocurrido un cambio de datos. Varios métodos de actualización existen y pueden ser adaptados par actualizar los índices GK. Una modalidad reconstruye un índice GK cuando cualquiera de los campos de referencia se alteran o suprimen el índice GK si la alteráción es incompatible con el índice GK (por ejemplo, el campo se suprime o cambia a un tipo de datos incompatible) . Este método es especialmente adecuado para medios de almacén de datos, en que los datos no son frecuentemente actualizados.
Un sistema de base de datos usa un índice GK para el acceso a datos, encontrando el valor de clave del índice GK en este índice GK y siguiendo los identificadores de registro asociados a los registros pertinentes de la tabla. Por ejemplo, usando el índice GK 1000 de la Figura 1, para encontrar registros de productos para un cliente de nombre Smith, el índice GK 1000 es primero buscado para una entrada para Smith 1030a, y los registros de productos se recuperan por los identificadores 1030b de registro correspondientes. Para usar un índice, sistemas de bases de datos correlacionados primero determinan si ese índice particular es usado apropiadamente para procesar una pregunta dada. Típicamente, los sistemas de base de datos tienen un optimizador de preguntas responsable en determinar si los índices, si los hay, se usan para procesar una pregunta dada. Generalmente, los optimizadores de pregunta determinan si usan un índice particular para una pregunta dada, determinando (1) si el índice es aplicable a la pregunta; y (2) si el índice es usado óptimamente para procesar la pregunta. Consideremos, por ejemplo, la siguiente pregunta Q: SELECCIONAR <query-select-list> DESDE <query-table-list> DONDE <query-condition list> y el índice GK, el GKI , se crea como sigue: CREAR ÍNDICE GK GKI EN T (SELECCIONAR <index-key-list> COMO CLAVE DESDE <index-other-tak DONDE <index-conditior Generalmente, para que un índice GK sea aplicable a una pregunta, la tabla que la indexa debe estar relacionada con la pregunta. La Figura 13 es un diagrama de flujo que ilustra el proceso en una modalidad de determianr la aplicabilidad. Si la tabla T, indexada por el índice de GK, GKI , no es una de las tablas en las <tablas de lista de preguntas> (1310), el índice GK, GKI , no es aplicable a la pregunta (1315) . Similarmente, si la <lista de condiciones del índice> es más restrictiva que la <lista de condiciones de la pregunta> (1320) , el índice de GK, GKI no es aplicable a la pregunta (1315) . De otra manera, el índice de GK, GKI es aplicable a esta pregunta (1325) . La capacidad restrictiva de la evaluación (1320) asegura que usando el índice GKI no se producirán resultados incompletos, que pudieran ocurrir si el índice GKI se crea en condiciones más restrictivas de las requeridas por la pregunta. En una modalidad, si se satisface la condición de capacidad de restricción, determinado por la evaluación si cada condición en la <lista de condiciones de índice> se satisface por al menos una condición de la <lista de condiciones de pregunta>. El siguiente ejemplo ilustra el concepto de aplicabilidad. Usando las tablas de las Figuras 1-3, se crean los siguientes índices: (1) cust_items index (índice de productos del cliente): como se ilustra en la Figura 10, el custom_items index 1000 asocia un nombre de un cliente con los identifica-dores de registro de los registros de productos para los productos comprados por ese cliente. (2) cust_big_items index (índice de productos grandes del cliente): ilustrado en la Figura 14, cust_big-ítems 1400 asocia un nombre de un cliente con los identifica-dores de registro de los registros de productos, para los productos comprados por ese cliente en pedidos que tengan un precio de cuando menos 50,000.00. Este índice puede ser creado por: CREAR ÍNDICE GK cust_big_items EN ÍTEM (SELECCIONAR cus--,cust ngme COMO CLAVE DESDE CUST, ORD DONDE CUST-cust_no = ORD.cust_no Y ORD.ord_no = ITEM-ord.No Y ORD.price > 50,000.00 (3) cust_many_big_items (muchos productos grandes del cliente): ilustrado en la Figura 15, cust__many_big_items 1500 asocia un nombre del cliente con los identificadores de registro de los registros de productos para productor los cuales se compraron en cantidades de cuando menos diez, comprados por ese cliente en pedidos que tienen un precio de cuando menos $50,000.00. Este índice se puede crear por: CREAR ÍNDICE GK cust_many_big_items EN ÍTEM (SELECCIONAR CUST-cust ñame COMO CLAVE DESDE CUST, ORD DONDE CUST.cust_.no = ORD.cust_no Y ORD.ord_.no = ITEM-ord.no Y ORD.price > 50 , 000 . 00 Y ITEM. quantity > 10 ) Las siguientes preguntas se expusieron en la base de datos que incluyen las tablas de las Figuras 1-3 : (1) Ql: Encontrar números de productos y cantidades de productos en pedidos por el cliente SMith. A esta pregunta se da formato como: SELECCIONAR ITEM.item_no, ITEM.quantity DESDE CUST, ORD, ÍTEM DONDE CUST.cust_no = ORD.cust_.no Y ORD.ord_no = ITEM.ord_.no (2) Q2 : Encontrar números y cantidades de artículos de productos en pedidos de cuando menos $60.000.00 por el cliente Smith. A esta pregunta se da formato como: SELECCIONAR ITEM.item_no, ITEM.quantity DESDE CUST, ORD, ÍTEM DONDE CUST.cust_name = "Smith" Y CUST.cust_no = ORD.cust_.no Y ORD.ord_.no = ITEM.ord_.no Y ORD.price > 60 , 000 . 00 (3 ) Q3 : Encontrar números y ca'nt idades de pedidos productos comprados en cantidades de cuando menos 25 de al menos $60 , 000 . 00 por el cliente Smith . A este pregunta se da formato como : SELECCIONAR ITEM.item_no, ITEM.quantity DESDE CUST, ORD, ÍTEM DONDE CUST.cust_name = "Smith" Y CUST.cust_no = ORD.cust_no Y ORD.ord_.no = ITEM.ord_no Y ORD.price > 60,000.00 Y ITEM-quantity = > 25 La aplicabilidad de los índices 1000, 1400 y 1500 a las preguntas Ql, Q2 y Q3 se ilustra en la Figura 16. Ql solicita información acerca de todos los productos comprados por Smith. Sólo el índice 1000 es aplicable debido a que las condiciones del índice de los índices 1400 y 1500 son más restrictivas que las condiciones de preguntas y no llevarán a resultados completos: La condición en el índice 1400 que precio de pedido (ORD.price) > 50,000 no es satisfecha por cualquier condición de Ql. Por lo tanto, el índice 1400 indica sólo los productos comprados por Smith en pedidos de al menos $50,000.00. El índice 1500 incluye condiciones de precio del pedido (ORD.price) > 50,000 como cantidad de productos (ITEM-quantity) > 10, ninguna de las cuales es satisfecha por cualquier condición de Q2. Así, el índice 1500 indica sólo los productos comprados por Smith en pedidos de al menos $50,000.00. Este ejemplo también ilustra que un índice que tiene condiciones más restrictivas que las condiciones de pregunta, puede llevar a resultados incorrectos: la respuesta apropiada a Ql , que requiere que todos los productos comprados por Smith correspondan a los productos 201, 202, 2032; el índice 1400 producirá sólo los productos 201 y 202; el índice 1500 producirá sólo el producto 201. El concepto de la aplicabilidad es además ilustrado por las preguntas Q2 y Q3. Q2 requiere los productos comprados por Smith en pedidos de al menos $60,000.00. El índice 1400 es aplicable a Q2 debido a su condición que el precio del pedido (ORD.price) > 50,000.00 se satisface por la condición de la pregunta Q2 que el precio del pedido (ORD.price > 60,000.00. El índice 1500 no es aplicable, debido a que, aunque su condición que el precio del pedido (ORD.price) > 50,000 se satisface, su condición que la cantidad del pedido (ORD.quantity) > 10 no se satisface por cualquier condición de Q2. Q3 requiere artículos comprados por Smith en cantidades mayores de 25 en pedidos de al menos $60,000.00. El índice 1400 es aplicable por la misma razón que es aplicable para Q2. El índice 1500 es también aplicable debido a que la condición que la cantidad de productos (ITEM-quantity) > 10 se satisface por la condición de la pregunta Q3, que la cantidad de productos (ÍTEM. quantity) > 25. Una vez determinando que un índice es aplicable a una pregunta dada, los opti izadores de la pregunta determi-nan generalmente si el índice es usado óptimamente en el proceso de la pregunta. Aunque los métodos de la optimización varían entre los opti izadores de preguntas, un método comúnmente usado se basa en el algoritmo optimizador de Selinger, discutido en P. G. Selinger et al., An Access Specificaction Language for a Relational Data Base System (Un Lenguaje de Especificación de Acceso para un Sistema de Base de Datos Correlacionado), 1979 ACM SIGMOD Int ' l Conf . on Management of Data 23-24 (mayo/junio 1979) . La idea básica del algoritmo de Selinger es enumerar planos de ejecución posible para el proceso de una pregunta dada, estimar el costo de cada posible plan y seleccionar el mejor plan (el plan que tiene el menor costo) . Así, el proceso de la pregunta: SELECCIONAR <query-select-list> DESDE <query-table-list> DONDE <query-condition-list>) donde <lista de tablas de preguntas> (<query-table-list>) es el conjunto {TI, T2 , ..., Tn} , y requiere que todas las tablas en <query-table-list> sean unidas. Un posible optimizador de Selinger genera planes para todas las tablas del conjunto de tablas de preguntas se ajusten y estimen el costo para cada permutación, comenzando con la primera tabla en la permutación y estimando el costo de unir esa tabla con una asegunda tabla, agregar el costo a la estimación del costo de unir el resultado de la primera unión a la tercera tabla, y continúa uniendo todas las tablas del conjunto de tablas y calculando el costo estimado acumulado. El costo total también considera el costo de incorporar las condiciones de una tabla que no requieren alguna unión. Este proceso se repite para cada posible permutación. Los índices pueden reducir el costo del plan. Los optimizadores de Selinger usan índices para reducir el costo de unir una tabla o reducir el costo de determinar una condición en una sola tabla. Haciendo referencia a las tablas 100, 200, 300 de las Figuras 1-3, consideremos la pregunta: SELECCIONAR CUST.name, ITEM.quantity DESDE CUST, ORD, ÍTEM DONDE CUST.cust_name = "Smith" Y CUST.cust_no = ORD.cust_.no Y ORD.ord_.no = ITEM.ord_no Y ITEM.quantity > 25 El ajuste de la tabla es (CUST, ORD, ÍTEM) , los planes incluyen las siguientes posibles permutaciones: (1) {CUST, ORD, ÍTEM} (2) {CUST, ÍTEM, ORD} (3) {ORD, CUST, ÍTEM} (4) {ORD, ÍTEM, CUST} (5) {ÍTEM, CUST, ORD} (6) {ÍTEM, ORD, CUST} El índice 1700 de la Figura 17 asocia el campo ITEM.quantity con ITEM.RID, y es útil para procesar la condición ITEM.quantity > 25. Esta condición hace referencia sólo a la tabla de productos (ÍTEM. table) y, por lo tanto, no requiere que cualquier otra tabla sea unida previamente. Así, el índice 1700 puede ser usado en cada uno de los planes (1) - (6) , cuando se agrega la tabla de productos. El índice 1800 de la Figura 18 asocia el campo ITEM.ord_no con ITEM.RID, y es útil para efectuar la condición ORD.ord_no = ITEM.ord_no, que une la tabla de productos a la tabla de pedidos por los campos comunes ord_no. Sin embargo, debido a que esta condición hace referencia a la tabla de pedidos, el índice 1800 se usa solamente para unir la tabla de productos si la tabla de pedidos ya se ha unido. Así, el índice 1800 se usa sólo en los planes (1), (3) y (4). Varios métodos para determinar cuando usar los índices GK pueden ser usados para adaptar los optimizadores de Selinger para incorporar los índices de GK en este algoritmo. Por ejemplo, en una modalidad, como índices convencionales de una tabla, un índice GK de una sola tabla en una tabla T se considerará siempre, cuando esa tabla se une. Los índice GK de múltiples tablas serán considerados cuando todas las tablas mencionadas en la lista clave ya se han unido. Los optimizadores de pregunta basados en algoritmos diferentes al algoritmo de Selinger, pueden ser adaptados similarmente para manejar los índices GK, aunque las modificaciones específicas pueden variar. Otras modalidades están dentro del ámbito de las siguientes reivindicaciones. Por ejemplo, otras modalidades pueden usar diferentes métodos de actualización. Una modalidad, más bien que suprimir un índice GK cuando la tabla de subrayado altera, actualiza o recalcula el índice. Otras posibles variaciones incluyen el uso de diferentes tipos de estructuras de datos y pueden ser usadas para representar los índices clave de GK, que incluyen los índices de árboles b y de mapeo de bits. En tanto la invención se ha descrito en términos de una forma de realización del software, la invención puede llevarse a cabo en el hardware o el software, o en una combinación de ambos. Preferiblemente, la invención se realiza en un programa de software que ejecuta en un sistema de proceso programable que comprende un procesador, un sistema de almacenamiento de datos, un dispositivo de entrada y un dispositivo de salida.
La Figura 19 ilustra tal sistema de proceso programable 1900, que incluye una UCP 1910, una memoria RAM 1920 y un controlador de Entrada/Salida 1930, acoplado por un colector 1940 de la UCP. El controlador de E/S 1930 está también acoplado por un colector de E/S 1950 a dispositivos de entrada, tal como un teclado 1960, y dispositivos de salida, tal como los exhibidores 1970. La presente invención se ha descrito en términos de una modalidad. Sin embargo, la invención no se limita a esta modalidad representada y descrita. El alcance de la invención, más bien se define por las reivindicaciones anexas.

Claims (14)

  1. REIVINDICACIONES 1. Un método, llevado a cabo por una computadora, para crear un índice para una primera tabla en una base de datos correlacionada, de múltiples tablas, basada en una clave de índice y condiciones de índice, este método comprende: determinar los valores de la clave de índice, en que si esta clave de índice hace referencia a tablas además de la primera tabla, el método además comprende recuperar los datos de las otras tablas, para determinar los valores de las claves de índice; asociar cada valor determinado de clave de índice con identificadores de registro de los registros de la primera tabla, que satisfacen las condiciones de índice, en que si las condiciones de índice hacen referencia a tablas además de la primera tabla, el método además comprende recuperar datos desde las otras tablas, para determinar los identificadores de registro asociados; y almacenar los valores de las claves de índice y los identificadores de registro asociados en un índice.
  2. 2. El método de la reivindicación 1, en que el valor de la clave de índice hace referencia al menos a una segunda tabla y una tercera tabla.
  3. 3. El método de la reivindicación 1, en que las condiciones del índice hacen referencia al menos a una segunda tabla y una tercera tabla.
  4. 4. El método de la reivindicación 1, en que la clave de índice es una expresión que hace referencia al menos a una segunda tabla.
  5. 5. El método de la reivindicación 4, en que la expresión de la clave de índice además hace referencia a una tercera tabla.
  6. 6. Un método, llevado a cabo por computadora, para crear un índice para una primera tabla en una base de datos correlacionada, de múltiples tablas, basada en una clave de índice, este método comprende: determinar los valores de claves de índices, en que la clave de índice comprende una expresión que hace referencia al menos a una segunda tabla; asociar cada valor de clave determinado con los identificadores de registro de los registros de la primera tabla; y almacenar los valores de clave de índice y los identificadores de registro asociados en un índice.
  7. 7. El método de la reivindicación 6, en que la expresión de la clave del índice además hace referencia a una tercera tabla.
  8. 8. Un método, llevado a cabo por computadora, para determinar la aplicabilidad de un índice para procesar una pregunta en una base de datos correlacionada, de múltiples tablas, en que el índice indexa una tabla de índice basada en una clave de índices y condiciones de índice, la pregunta se basa en condiciones de esta pregunta que hace referencia a un conjunto de tablas de preguntas, y cada una de las tablas son tablas de bases de datos correlacionada, de múltiples tablas, este método comprende: determinar si la tabla de índice es una de las tablas de preguntas; determinar si las condiciones de índice son menos o igualmente restrictivas en comparación con las condiciones de las preguntas; y determinar el índice que se va a aplicar para procesar la pregunta si la tabla de índice es una de las tablas de preguntas y las condiciones de índice son menores o igualmente restrictivas en comparación con las condiciones de la pregunta.
  9. 9. El método de la reivindicación 8, en que la determinación si las condiciones del índice son menos o igualmente restrictivas, en comparación con las condiciones de las preguntas, comprenden determinar si cada condición del índice es satisfecha por al menos una condición de la pregunta.
  10. 10. Un método, llevado a cabo por computadora, para procesar una pregunta en un conjunto de tablas de preguntas en una base de datos correlacionada, este método comprende: recuperar un índice, que comprende entradas de índice que tienen valores clave de índice e identificadores de registro asociados, de los registros de una primera tabla de preguntas en el conjunto de tablas de preguntas, en que la asociación entre las entradas de índice y los identificadores de registro asociados se basa en cuando menso una segunda tabla de preguntas y una tercera tabla de preguntas en el conjunto de tablas de preguntas; determinar un valor de clave de índice, basado en la pregunta; determinar una entrada de índice, que corresponde al valor clave de índice determinado; y recuperar registros de la primera tabla de preguntas, con base en los identificadores de registro asociados de la entrada de índice determinada.
  11. 11. Un método, llevado a cabo por computadora, para procesar una pregunta en un conjunto de tablas de preguntas en una base de datos correlacionada, este método comprende: recuperar un índice, que comprende entradas de índice que tienen valores clave de índice e identificadores de registro asociados, de los registros de una primera tabla de preguntas en el conjunto de tablas de preguntas, en que los valores clave de índice se basan en una expresión que hace referencia al menos a una segunda tabla de preguntas en el conjunto de tablas de preguntas; determinar un valor de la clave de índice, basado en la pregunta; seleccionar una entrada de índice, que corresponde al valor de la clave de índice determinada; y recuperar los registros de la primera tabla de preguntas, con base en la entrada de índice seleccionada.
  12. 12. Un índice almacenado en un medio que puede ser leído por un procesador, para hacer posible a un procesador programable ordenar los registros de una primera tabla de una base de datos correlacionada, de múltiples tablas, basada en una clave de índice y condiciones de índice, este índice comprende: valores claves de índice; e identificadores de registro asociados para los registros de la primera tabla que satisfagan las condiciones del índice; en que al menos una de las claves de índice y las condiciones de índice hacen referencia a una segunda y tercera tablas de la base de datos correlacionada de múltiples tablas.
  13. 13. Un índice almacenado en un medio que puede ser leído por un procesador, para hacer posible que un procesador programable ordene los registros de una primera tabla de una base de datos correlacionada, de múltiples tablas, con base en la clave de índice, este índice comprende: valores clave de índice; e identificadores de registro asociados para los registros de la primera tabla; en que la clave de índice es una expresión que hace referencia al menos a una segunda tabla de la base de datos correlacionada, de múltiples tablas.
  14. 14. El índice de la reivindicación 13, en que la expresión de clave de índice además hace referencia a una tercera tabla.
MXPA/A/1997/005043A 1996-07-09 1997-07-03 Indices generalizados de claves MXPA97005043A (es)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08677490 1996-07-09
US08/677,490 US5870747A (en) 1996-07-09 1996-07-09 Generalized key indexes

Publications (2)

Publication Number Publication Date
MX9705043A MX9705043A (es) 1998-07-31
MXPA97005043A true MXPA97005043A (es) 1998-11-09

Family

ID=

Similar Documents

Publication Publication Date Title
US5870747A (en) Generalized key indexes
EP1425682B1 (en) Database processor for on-line analytical processing of multidimensional data
US5926820A (en) Method and system for performing range max/min queries on a data cube
US8073840B2 (en) Querying joined data within a search engine index
US7805465B2 (en) Metadata management for a data abstraction model
US6233573B1 (en) System and method for selecting rows from dimensional databases having temporal dimention
US5265244A (en) Method and system for facilitating processing of statistical inquires on stored data accessible through a data access structure
US7949652B2 (en) Filtering query results using model entity limitations
US5043872A (en) Access path optimization using degrees of clustering
US6973452B2 (en) Limiting scans of loosely ordered and/or grouped relations using nearly ordered maps
JP2972928B2 (ja) デジタルデータ処理システム
US6965891B1 (en) Method and mechanism for partition pruning
US7747640B2 (en) Method for regenerating selected rows for an otherwise static result set
US7324991B1 (en) Sampling in a multidimensional database
US20070226180A1 (en) Method,system, and program for query optimization with algebraic rules
US20130254171A1 (en) Query-based searching using a virtual table
JP2002510088A (ja) 予め演算されたビューの処理
WO1998047092A1 (en) Method and apparatus for storing, retrieving, and processing multi-dimensional customer-oriented data sets
US20140250119A1 (en) Domain based keyword search
EP1482419A1 (en) Data processing system and method for application programs in a data warehouse
US7299224B2 (en) Method and infrastructure for processing queries in a database
US20030126127A1 (en) Estimation of join fanout using augmented histogram
MXPA97005043A (es) Indices generalizados de claves
Karayannidis et al. Design of the ERATOSTHENES OLAP Server
Pieringer et al. Transbase®: A leading-ege ROLAP engine supporting multidimentstional indexing and hierarchy clustering