شاخص های معکوس تعمیم یافته یا شاخص های جین ، نگاشتهای خود را از مقادیر موجود در یک ستون کانتینر (مانند یک سند JSONB) به ردیف که این مقدار را در خود جای داده است ، ذخیره می کند. از آنها برای سرعت بخشیدن به جستجوهای مهار استفاده می شود ، به عنوان مثال ، "تمام ردیف های این جدول را به من نشان دهید که دارای یک ستون JSON است که حاوی جفت ارزش کلید است". شاخص های جین معمولاً در سیستم های بازیابی اسناد مورد استفاده قرار می گیرند.
CockroachDB محتویات انواع داده های زیر را در فهرست های جین ذخیره می کند:
- jsonb
- آرایه
- داده های مکانی (هندسه و انواع جغرافیا)
- رشته ها (با استفاده از شاخص های TRIGRAM)
برای نمایش مفید از استفاده از شاخص های جین برای بهبود عملکرد پرس و جو در ستون JSONB ، به آموزش JSON مراجعه کنید.
شاخص های جین چگونه کار می کنند؟
شاخص های استاندارد برای جستجوهای مبتنی بر پیشوندهای داده های مرتب شده به خوبی کار می کنند. با این حال ، انواع داده مانند JSONB یا آرایه ها بدون اسکن کامل جدول قابل پرس و جو نیست ، زیرا آنها به اپراتورهای مقایسه پیشوند ارزش معمولی پایبند نیستند. JSONB به طور خاص باید به روشی دقیق تر از آنچه که یک فهرست استاندارد ارائه می دهد ، فهرست بندی شود. اینجاست که شاخص های جین مفید هستند.
شاخص های جین بر روی مؤلفه های داده های قابل سنجش فیلتر می شوند. نوع داده JSONB بر روی دو ساختار ساخته شده است که می توان آنها را نشان داد:
- اشیاء-مجموعه ای از جفت های ارزش کلید که در آن هر جفت ارزش کلید یک نشانه است.
- آرایه ها - لیست های سفارش داده شده از مقادیر که هر مقدار در آرایه یک نشانه است.
به عنوان مثال ، مقدار JSONB زیر را در ستون قرار دهید:
"نام کوچک": "جان", "نام خانوادگی": "اسمیت", "سن": 25, "نشانی": "حالت": "NY", "کد پستی": "10021" >, "ماشین ها": [ "سوبارو", "هوندا" ] >
یک شاخص جین برای این شیء می تواند در هر مؤلفه ورودی داشته باشد و آن را به شیء اصلی برگرداند:
"FirstName": "جان" "نام خانوادگی": "اسمیت" "سن": 25 "آدرس": "حالت": "ny" "آدرس": "postalcode": "10021" "اتومبیل": "Subaru" "":" هوندا "
این به شما امکان می دهد تا بر اساس مؤلفه های فرعی جستجو کنید.
ایجاد
می توانید از شاخص های GIN برای بهبود عملکرد نمایش داده ها با استفاده از ستون های JSONB یا Array استفاده کنید. می توانید آنها را ایجاد کنید:
- با استفاده از شاخص ایجاد نحو سازگار با PostgreSQL. با استفاده از جین:
ايجاد كردن فهرست مطالب اختیاری نام> ON جدول> استفاده كردن جین (ستون>);
همچنین می توانید با استفاده از نحو ، JSONB_OPS یا ARRAY_OPS OPCLASS (برای ستون های JSONB و Array) را مشخص کنید:
ايجاد كردن فهرست مطالب اختیاری نام> ON جدول> استفاده كردن جین (ستون> عظیم>);
ايجاد كردن معکوس فهرست مطالب اختیاری نام> ON جدول> (ستون>);
انتخاب
اگر یک پرس و جو حاوی یک فیلتر در برابر ستون JSONB یا آرایه ایندکس شده باشد که از هر یک از اپراتورهای پشتیبانی شده استفاده می کند ، شاخص GIN به مجموعه کاندیداهای شاخص اضافه می شود.
در بیشتر موارد ، CockroachDB شاخصی را که محاسبه می کند انتخاب می کند ، کمترین ردیف ها را اسکن می کند (یعنی سریعترین). مواردی که CockroachDB از چندین شاخص استفاده می کند شامل نمایش داده های خاصی است که از اختلالات استفاده می کنند (به عنوان مثال ، پیش بینی با OR) ، و همچنین زیگزاگ برای برخی از سؤالات دیگر می پیوندد. برای یادگیری نحوه استفاده از جمله توضیح برای پرس و جو خود برای دیدن کدام فهرست استفاده کنید ، به انتخاب فهرست در CockroachDB مراجعه کنید.
برای نادیده گرفتن انتخاب شاخص CockroachDB ، می توانید یک پرس و جو را نیز برای استفاده از یک شاخص خاص (همچنین به عنوان "اشاره به شاخص") و یا استفاده از یک اشاره به معکوس استفاده کنید.
ذخیره سازی
فروشگاه های CockroachDB مستقیماً در فروشگاه ارزش کلیدی شما فهرست می شوند. می توانید اطلاعات بیشتری را در جدول نقشه برداری پست وبلاگ ما به ذخیره سازی ارزش کلیدی پیدا کنید.
قفل
جداول در هنگام ایجاد شاخص به دلیل روش تغییر طرحواره CockroachDB قفل نشده اند.
کارایی
ایندکس ها یک تجارت ایجاد می کنند: آنها سرعت نمایش داده ها را تا حد زیادی بهبود می بخشند ، اما می نویسد کمی آهسته می نویسد (زیرا مقادیر جدید باید کپی و مرتب شوند). اولین شاخصی که ایجاد می کنید بیشترین تأثیر را دارد ، اما شاخص های اضافی فقط سربار حاشیه ای را معرفی می کنند.
مقایسه
در این بخش نحوه انجام مقایسه در ستون های JSONB و آرایه توضیح داده شده است.
jsonb
شاخص های جین در ستون های JSONB از اپراتورهای مقایسه زیر پشتیبانی می کنند:
- توسط:
- contains : @>
- equals : = . To use = , you must also reach into the JSON document with the >اپراتور. مثلا:
نماد/دکمه ها/کپی
> انتخاب کنید * از جانب a جایی که j >'foo' = "" 1 ";
This is equivalent to using @> : نماد/دکمه ها/کپی
> انتخاب کنید * از جانب a جایی که j @> '';
اگر به استفاده از مقایسه نیاز دارید<,
- یک جدول با یک ستون محاسبه شده ایجاد کنید:
نماد/دکمه ها/کپی
> ايجاد كردن جدول تست ( id در نظر گرفتن, داده ها jsonb, فحش در نظر گرفتن AS ((داده ها>>'foo')::در نظر گرفتن) ذخیره شده );
نماد/دکمه ها/کپی
> ايجاد كردن فهرست مطالب test_idx ON تست (فحش);
نماد/دکمه ها/کپی
> انتخاب کنید * از جانب تست جایی که فحش > 3;
آرایه
شاخص های جین در ستون های آرایه از اپراتورهای مقایسه زیر پشتیبانی می کنند:
شاخص های جین جزئی
شما می توانید یک شاخص جین جزئی ، یک شاخص جین در زیر مجموعه داده های ستون JSON ، Array یا Geospatial Container ایجاد کنید. دقیقاً مانند فهرست های جزئی که از انواع داده های غیر کانتینر استفاده می کنند ، شما با استفاده از یک بند ، مانند یک بند که در آن بند ، یک شاخص جین جزئی ایجاد می کنید ، که در یک محمول بولی به درستی ارزیابی می شود.
نماد/دکمه ها/کپی
ايجاد كردن جدول تست ( id در نظر گرفتن, داده ها jsonb, معکوس فهرست مطالب idx_data(داده ها) جایی که id > 10 );
شاخص های جین در جداول ردیف منطقه ای در پایگاه داده های چند منطقه ای
در استقرار چند منطقه ، بیشتر کاربران باید به جای تقسیم بندی شاخص صریح ، از جداول ردیف استفاده کنند. هنگامی که یک شاخص را به جدول ردیف منطقه ای اضافه می کنید ، به طور خودکار در ستون CRDB_REGION تقسیم می شود. پارتیشن بندی شاخص صریح لازم نیست.
در حالی که CockroachDB یک منطقه افزودنی یا بیانیه منطقه را در یک پایگاه داده خاص انجام می دهد ، ایجاد یا اصلاح یک شاخص خطایی را ایجاد می کند. به طور مشابه ، تمام بیانیه های منطقه ADD و منطقه قطره مسدود می شوند در حالی که یک شاخص در یک منطقه با جدول ردیف در همان پایگاه داده اصلاح می شود.
برای نمونه ای که از شاخص های منحصر به فرد استفاده می کند اما در مورد همه فهرست های منطقه ای توسط جداول ردیف اعمال می شود ، به یک فهرست منحصر به فرد به یک منطقه با جدول ردیف اضافه کنید.
شاخص های جین چند ستونی
می توانید یک شاخص جین با چندین ستون ایجاد کنید. آخرین ستون فهرست بندی شده باید یکی از انواع معکوس مانند JSON ، آرایه ، هندسه و جغرافیا باشد. تمام ستون های قبلی باید انواع مختلفی داشته باشند که قابل فهرست باشند. این شاخص ها ممکن است برای نمایش داده هایی که تمام ستون های شاخص را محدود می کند استفاده شود.
نماد/دکمه ها/کپی
ايجاد كردن جدول کاربران ( پروفایل_ id uuid اولیه کلید پیش فرض gen_random_uuid(), user_type رشته, مشخصات کاربر jsonb, معکوس فهرست مطالب (user_type, مشخصات کاربر) );
مثال ها
یک جدول با شاخص جین در ستون JSONB ایجاد کنید
در این مثال ، بیایید یک جدول با یک ستون JSONB و یک فهرست جین ایجاد کنیم:
نماد/دکمه ها/کپی
> ايجاد كردن جدول کاربران ( پروفایل_ id uuid اولیه کلید پیش فرض gen_random_uuid(), اخرین به روز رسانی زمان سنج پیش فرض اکنون(), مشخصات کاربر jsonb, معکوس فهرست مطالب user_details (مشخصات کاربر) );
سپس ، چند ردیف داده را وارد کنید:
نماد/دکمه ها/کپی
> درج کردن به کاربران (مشخصات کاربر) ارزش های (''), (''), ('' );
نماد/دکمه ها/کپی
> انتخاب کنید *, jsonb_pretty(مشخصات کاربر) از جانب کاربران;
+--------------------------------------+----------------------------------+--------------------------------------------------------------------------+------------------------------------+ | profile_id | last_updated | user_profile | jsonb_pretty | +--------------------------------------+----------------------------------+--------------------------------------------------------------------------+------------------------------------+ | 81330a51-80b2-44aa-b793-1b8d84ba69c9 | 2018-03-13 18:26:24.521541+00:00 | | | | | | | "breed": "Boston Terrier", | | | | | "first_name": "Carl", | | | | | "last_name": "Kimball", | | | | | "location": "NYC" | | | | |> | | 81c87adc-a49c-4bed-a59c-3ac417756d09 | 2018-03-13 18:26:24.521541+00:00 | | | | | | | "first_name": "Eie", | | | | | "location": "Brooklyn", | | | | | "status": "Looking for treats" | | | | |> | | ec0a4942-b0aa-4a04-80ae-591b3f57721e | 2018-03-13 18:26:24.521541+00:00 | | | | | | | "first_name": "Lola", | | | | | "friends": 547, | | | | | "last_name": "Dog", | | | | | "location": "NYC", | | | | | "online": true | | | | |>|+--------------------------------------+----------------------------------+-----------------------------------------------------------------------------------------+--------------------------------------+ (3 ردیف)
اکنون ، یک پرس و جو را اجرا کنید که روی ستون JSONB فیلتر می شود:
نماد/دکمه ها/کپی
> انتخاب کنید * از جانب کاربران جایی که مشخصات کاربر @> '';
+--------------------------------------+----------------------------------+-----------------------------------------------------------------------------------------+|profile_id |Last_updated |user_profile |+--------------------------------------+----------------------------------+-----------------------------------------------------------------------------------------+|81330A51-80B2-44AA-B793-1B8D84BA69C9 |2018-03-13 18: 26: 24. 521541+00: 00 |||EC0A4942-B0AA-4A04-80AE-591B3F57721E |2018-03-13 18: 26: 24. 521541+00: 00 ||+--------------------------------------+----------------------------------+-----------------------------------------------------------------------------------------+(2 ردیف)
با یک ستون آرایه یک فهرست جین را به یک جدول اضافه کنید
در این مثال ، بیایید ابتدا یک جدول با یک ستون آرایه ایجاد کنیم و بعداً شاخص جین را اضافه کنیم:
نماد/دکمه ها/کپی
> ايجاد كردن جدول دانش آموزان ( دانش آموز_ id uuid اولیه کلید پیش فرض gen_random_uuid(), نشان در نظر گرفتن آرایه );
چند ردیف داده را وارد کنید:
نماد/دکمه ها/کپی
> درج کردن به دانش آموزان (نشان) ارزش های (آرایه[10,20,50]), (آرایه[20,40,100]), (آرایه[100,20,70] );
نماد/دکمه ها/کپی
> انتخاب کنید * از جانب دانش آموزان;
+--------------------------------------+--------------+ |student_id |مارک ها |+--------------------------------------+--------------+ |11CDC77C-2F12-48D4-8BB4-DDEE7C705E00 ||||||2526C746-0B32-4F6B-A2B4-7CE6D411C1C2 ||||||EEFDC32E-4485-45CA-9DF1-80C0F42D73C0 |||||+--------------------------------------+--------------+ (3 ردیف)
حال ، بیایید یک شاخص جین را به جدول اضافه کنیم و یک پرس و جو را اجرا کنیم که روی آرایه فیلتر می شود:
نماد/دکمه ها/کپی
> ايجاد كردن معکوس فهرست مطالب student_marks ON دانش آموزان (نشان);
نماد/دکمه ها/کپی
> انتخاب کنید * از جانب دانش آموزان جایی که نشان @> آرایه[100];
+--------------------------------------+--------------+ |student_id |مارک ها |+--------------------------------------+--------------+ |2526C746-0B32-4F6B-A2B4-7CE6D411C1C2 ||||||EEFDC32E-4485-45CA-9DF1-80C0F42D73C0 |||||+--------------------------------------+--------------+ (2 ردیف)
یک جدول با یک شاخص جین جزئی در ستون JSONB ایجاد کنید
در همان جدول کاربران از ایجاد یک جدول با شاخص جین در ستون JSONB ، یک شاخص GIN جزئی برای کاربران آنلاین ایجاد کنید.
نماد/دکمه ها/کپی
ايجاد كردن معکوس فهرست مطالب idx_online_users ON کاربران(مشخصات کاربر) جایی که مشخصات کاربر > 'برخط' = 'درست است، واقعی';
نماد/دکمه ها/کپی
انتخاب کنید * از جانب کاربران جایی که مشخصات کاربر > 'برخط' = 'درست است، واقعی';
profile_id |Last_updated |user_profile -------------------------------------------+-------------------------------------+----------------------------------------------------------------------------------------------------------------------- B6DF0CAE-D619-4A08-AB4F-2815DA7B981F |2021-04-13 20: 54: 35. 660734+00: 00: 00 |(1 ردیف)
اکنون ، از شاخص اشاره با شاخص جین جزئی استفاده کنید.
انتخاب کنید * از جانب کاربران@idx_online_users جایی که مشخصات کاربر>'برخط' = 'درست است، واقعی' وت مشخصات کاربر>'محل' = "NYC" ";
profile_id |Last_updated |user_profile -------------------------------------------+-------------------------------------+--------------------------------------------------------------------------------------------------------------------- EA1DB57E-51C3-449D-B928-ADAB11191085 |2021-04-14 20: 45: 39. 960443+00: 00: 00 |(1 ردیف)
یک فهرست Trigram را روی یک ستون رشته ایجاد کنید
برای مثال نشان می دهد که چگونه می توان یک شاخص TRIGRAM را در یک ستون رشته ایجاد کرد ، به شاخص های Trigram مراجعه کنید.
نمونه های معکوس
برای اجرای این مثالها ، یک خوشه نسخه ی نمایشی را با حجم کار MOVR آغاز کنید.
پایگاه داده MovR را روی یک خوشه نمایشی CockroachDB 3 گره با مجموعه داده بزرگتر راه اندازی کنید.
نماد/دکمه ها/کپی
سوسک دمو movr--num-histories250000--num-کدهای تبلیغاتی250000--num-rides125000--num-users12500-- تعداد - وسایل نقلیه3750-- گره ها 3
یک شاخص GIN در ستون انتهایی جدول وسایل نقلیه ایجاد کنید.
نماد/دکمه ها/کپی
ايجاد كردن معکوس فهرست مطالب idx_vehicle_details ON وسايل نقليه(داخلی);
طرح دستور را برای یک عبارت SELECT که از یک اتصال معکوس داخلی استفاده می کند، بررسی کنید.
نماد/دکمه ها/کپی
توضیح انتخاب کنید * از جانب وسايل نقليه@وسایل نقلیه_pkey AS v2 داخلی معکوس پیوستن وسايل نقليه@idx_vehicle_details AS v1 ON v1.داخلی @> v2.داخلی;
info --------------------------------------------- distribution: full vectorized: true • lookup join │ table: vehicles@vehicles_pkey │ equality: (city, id) = (city,id) │ equality cols are key │ pred: ext @>ext │ └── • پیوستن معکوس │ جدول: Vehicles@idx_vehicle_details │ └── • اسکن تعداد ردیف تخمینی: 3750 (100% جدول؛ آمار جمع آوری شده 1 ساعت پیش) جدول: وسایل نقلیه 1_prows AN@vehians)
You can omit the INNER INVERTED JOIN statement by putting v1.ext on the left side of a @>شرط ملحق شدن در یک عبارت WHERE و با استفاده از یک اشاره شاخص برای شاخص GIN.
نماد/دکمه ها/کپی
توضیح انتخاب کنید * از جانب وسايل نقليه@idx_vehicle_details AS v1, وسايل نقليه AS v2 جایی که v1.داخلی @> v2.داخلی;
info -------------------------------------------------------------------------------------------- distribution: full vectorized: true • lookup join │ table: vehicles@vehicles_pkey │ equality: (city, id) = (city,id) │ equality cols are key │ pred: ext @>ext │ └── • پیوستن معکوس │ جدول: Vehicles@idx_vehicle_details │ └── • اسکن تعداد ردیف تخمینی: 3750 (100% جدول؛ آمار جمع آوری شده 1 ساعت پیش) جدول: وسایل نقلیه 1_prows AN@vehians)
از اشاره LEFT INVERTED JOIN برای انجام اتصال معکوس چپ استفاده کنید.
نماد/دکمه ها/کپی
توضیح انتخاب کنید * از جانب وسايل نقليه AS v2 ترک کرد معکوس پیوستن وسايل نقليه AS v1 ON v1.داخلی @> v2.داخلی;
info ------------------------------------------------------------------------------------------ distribution: full vectorized: true • lookup join (left outer) │ table: vehicles@vehicles_pkey │ equality: (city, id) = (city,id) │ equality cols are key │ pred: ext @>ext │ └── • پیوستن معکوس (خارجی سمت چپ) │ جدول: Vehicles@idx_vehicle_details │ └── • اسکن تعداد سطر تخمینی: 3750 (100% جدول؛ آمار جمع آوری شده F. sp. اسکن (16 ردیف)
همچنین ببینید
- شاخص ها
- شاخص های تریگرام
- jsonb
- آرایه
- داده های مکانی (هندسه و انواع جغرافیا)
- رشته
- ایجاد شاخص
- ستون های محاسبه شده
- بیانیه های SQL
تجارت گزینه های دودویی در ایران...
ما را در سایت تجارت گزینه های دودویی در ایران دنبال می کنید
برچسب :
نویسنده : زینالعابدین مراغهای
بازدید : <-PostHit->
تاريخ : يکشنبه
12 شهريور
1402 ساعت: 23:18