আপনি কখন একটি স্থানিক সূচক ব্যবহার করবেন না?


29

আমি এটি জিজ্ঞাসা করছি কারণ আমি মূলত ওরাকল নিয়ে কাজ করছি তবে গত এক বছর ধরে আমি পোস্টজিআইএস এবং এসকিউএল সার্ভার ২০০৮ এর সাথে দ্বিগুণ হয়েছি O

13226, 00000, "একটি স্থানিক সূচক ব্যতীত ইন্টারফেস সমর্থিত নয়" // কারণ: জ্যামিতি সারণীতে একটি স্থানিক সূচক নেই। // * ক্রিয়া: স্থানিক অপারেটরে রেফারেন্সযুক্ত জ্যামিতি সারণীর উপরে একটি স্থানিক সূচক রয়েছে কিনা তা যাচাই করুন।

আমার কাছে এটি বোধগম্য হয়। আপনি একটি স্থানিক জিজ্ঞাসা চালান = আপনার অবশ্যই একটি স্থানিক সূচক থাকতে হবে। তবে যতদূর আমি বুঝতে পেরেছি, কোনও পোস্টজিআইএস এসকিউএল সার্ভ করে না এটির প্রয়োজন হয় না। পোস্টজিআইএস এমনকি ফাংশন (_ * উদাঃ _এসটি কন্টেন্টস) বলে মনে হয় যে স্পষ্টত স্থানীয় স্থানের সূচকটি ব্যবহার করবে না।

সুতরাং প্রশ্নটি হল- এমন কোনও মামলা রয়েছে যেখানে আপনার স্থানিক সূচি ব্যবহার করা উচিত নয় ?. অগত্যা এটি 'গ্রহণ করুন বা ছেড়ে দিন' পদ্ধতির কিনা তা হ'ল এটি কোনও তাত্পর্যপূর্ণ করবে না, তবে স্থানিক সূচকটি ব্যবহার না করে কর্মক্ষমতা বাড়িয়ে তুলবে? আমার কাছে, সর্বশেষ বাক্যটি শর্তাদির একটি বিপরীতে তবে অন্যথায় কেন পোস্টজিআইএস এই ফাংশনগুলি সরবরাহ করবে?


3
আপনি যদি দেখতে চান যে কোনও সূচি পোস্টজিআইএস সেটে সক্ষম_সেকস্ক্যান = বন্ধে জিনিসগুলি ধীরে ধীরে করে তোলে। এটি পোস্টগ্র্রেএসকিউএলকে প্রতিবার সূচকগুলি ব্যবহার করতে বাধ্য করবে। এটির সাথে গতির তুলনা করুন।
শান

এই থ্রেড শুরু করার জন্য ধন্যবাদ। আমি নেট উপর তথ্য .ালছি, আমার সংস্থা (সরকার) কেন তাদের ওরাকল / এসডি বৈশিষ্ট্য ক্লাস এবং টেবিলগুলিতে স্থানিক (বা এমনকি বৈশিষ্ট্য) সূচকগুলি ব্যবহার করে না তা জানার চেষ্টা করে। এখন আমি তাদের কাছে কয়েকটা যুক্তি দিচ্ছি যাতে আমার নিজের চুলগুলি টানতে হবে না, নিজেকে সমাধানের জন্য কোনও প্রশ্নের অপেক্ষা করতে হবে।
মাইক

উত্তর:


12

mapoholic,

সাধারণভাবে বলতে গেলে, যদি আপনি সত্যিকার অর্থে ছোট ছোট টেবিলগুলি ব্যবহার না করেন তবে একটি স্থানিক সূচি ব্যতীত স্থানিক জিজ্ঞাসা করার কোনও কারণ নেই। তারপরেও আপনি এস-এস ব্যবহার করবেন যা কোন সূচক ব্যবহার করে না তবে আপনার কাছে && সূচীযোগ্য শর্ট সার্কিট বক্স অপারেটর রয়েছে। _ST দিয়ে শুরু হওয়া ফাংশনগুলি শেষ ব্যবহারকারীদের দ্বারা ব্যবহৃত হয় না। তাদের অস্তিত্বের কারণ হ'ল তাদের। পোস্টজিআইএস স্পেশিয়াল ইনডেক্সগুলি সূচকের ব্যবহারকে জোর করতে এসকিউএল ইনলাইনিং ব্যবহার করে - _ST সাধারণত জিইওএস দ্বারা করা হয় এবং && হল সূচকটি যা পুনঃক্রম হতে পারে। সুতরাং _ST সত্যিই একটি বাস্তবায়ন নিদর্শন।

সুতরাং সংক্ষেপে - এটি একটি ফাংশন নয় যাতে আরও তীব্র স্থানিক চেকের আগে সূচি অপারেশনটিকে একবারে পুনরায় সাজানো যায়।


চিয়ার্স LR1234567। আমি মনে করি এটিই আমি খুঁজছিলাম।
ম্যাপোহোলিক

25

যদি আপনার ডেটাসেটটি যুক্ত হয়ে থাকে এবং প্রায়শই আপডেট হয় তবে ইনসার্ট, ডিলেট এবং আপডেটের বিবৃতিগুলি সূচকটি পুনরায় তৈরি করার কারণ হয়ে ডাটাবেসকে কমিয়ে দিতে পারে।

বাল্ক সন্নিবেশগুলির জন্য, যেমন পুরো ওএসএম ডেটাসেটটিকে একটি ডাটাবেসে লোড করা, সূচকগুলি ফেলে দেওয়া এবং পরে এগুলি আবার তৈরি করা দ্রুততর হতে পারে।

যদি কোনও সূচকে উপেক্ষা করা আরও দক্ষ হয় (উদাহরণস্বরূপ সারণী মেমরিতে লোড করার জন্য যথেষ্ট ছোট), ডাটাবেস ক্যোয়ারী প্রসেসরের এটি স্বয়ংক্রিয়ভাবে করা উচিত।

আমি প্রত্যাশা করছিলাম যে কোনও স্থানিক সূচক ব্যতীত ক্যোরিগুলি চালানোর অনুমতি দেওয়ার মূল কারণ হ'ল এটি ছাড়াই না করে কোনও সূচক ব্যবহার করে আপনি যে পারফরম্যান্স সুবিধা পাবেন তা পরিমাপ করা।

অবশেষে আপনি যদি ক্যোয়ারী এবং মানচিত্রের প্রদর্শনগুলিতে একটি বিশাল পারফরম্যান্স উত্সাহ প্রদর্শন করতে চান তবে আপনি সিস্টেম বিকাশে একটি উপযুক্ত মুহুর্তে সূচকগুলি তৈরি করতে বিলম্ব করতে চাইতে পারেন ...


3
(+1) আমি কি এই শেষ মন্তব্যে কিছুটা দুর্বোধ্যতা সনাক্ত করতে পারি? :-)
হোবার

একেবারেই নয় ;-) তবে সাবধানতার সাথে টিউন করা সূচকগুলি বাদ / পুনরুদ্ধার করা "এক্স ডাটাবেস পরিবর্তনে কেন বেশি সময় ব্যয় করা হয়েছিল" এর একটি কার্যকর উত্তর?
ভূগোলিকা

ধন্যবাদ ভৌগলিকাগুলি- এবং আমি whuber এর মন্তব্যে একমত! ;-) আমি বুঝতে পারি যে বাল্ক লোড করার সময় আপনি স্থানিক সূচকগুলি নিষ্ক্রিয় / অক্ষম করবেন - বা বিষয়টির জন্য সমস্ত সূচকগুলি, তবে আপনি কেন কোনও স্থানিক সূচি ব্যবহার না করে আপনি কখনও একটি স্থানিক জিজ্ঞাসা করবেন এমন কোনও কারণ ভাবতে পারেন না? যদি কোনও টেবিল পর্যাপ্ত পরিমাণে ছোট হয় তবে সূচকটি ব্যবহার করা কোনও পার্থক্য করতে পারে না fair যথেষ্ট- তবে সূচকটি ব্যবহার না করা পছন্দ করে?। জানি না, আমি অনুমান করি
পোস্টজিআইএস

2
যদি কোনও টেবিল পর্যাপ্ত পরিমাণে ছোট হয় এবং মেমরির সাথে ফিট করে তবে একটি সূচক ব্যবহার করে র‌্যান্ডম ডিস্ক অ্যাক্সেসের প্রয়োজন হয় যা ক্রমিক স্ক্যান করার চেয়ে ব্যয়বহুল। wiki.postgresql.org/wiki/…
শান

2
@ ম্যাপোহোলিক - আপনি যখন ডেটা ম্যানুয়ালি নিজের ডেটা প্রিফিল্টারটি করতে পেরেছিলেন তখন থেকেই পুরানো.ন্যাবল.com
জিওগ্রাফিকিকা ২

10

আমি মনে করি এটা উহ্য হয়, কিন্তু আমি চাই না যখন আমি একটি অ স্থানিক সূচক যে আমি পরিবর্তে ব্যবহার করতে পারে ছিল একটি ক্যোয়ারী জন্য একটি স্থানিক সূচক ব্যবহার করুন। উদাহরণস্বরূপ, আমার কাছে 2,113,450 পয়েন্ট রয়েছে যা আমেরিকা যুক্তরাষ্ট্র একটি টেবিলের মধ্যে লোড করে an আমি যদি আলাস্কার রাজ্যের মধ্যে থাকা সমস্ত পয়েন্টগুলি টানতে চাইতাম তবে আমি হয় এমন একটি স্থানিক জিজ্ঞাসা করতে পারি যা আলাস্কার রাজ্যের জ্যামিতির সাথে তুলনা করার জন্য পয়েন্ট জ্যামিতিতে জিআইএসটি সূচক ব্যবহার করেছিল, বা আমি কেবল ব্যবহার করতে পারতাম "state_alpha" = 'একে' রয়েছে এমন সমস্ত পয়েন্ট ফিরিয়ে দিতে পয়েন্ট ডেটাতে "state_alpha" ক্ষেত্রটি (যা সূচকযুক্তও)।

"এটির স্থানিক অংশটি কোথায়?" ঠিক আছে, আলাস্কা_পয়েন্টগুলি সংগ্রহ করার পরে যদি আমাকে আরও কিছু স্থানিক বিশ্লেষণ করার দরকার হয় তবে প্রথমে একটি স্থান-অ-ক্যোয়ারী ব্যবহার করে those পয়েন্ট জ্যামিতিগুলি সংগ্রহ করা আরও দ্রুত। এর অর্থ হ'ল সত্যই বড় ডেটা সেটগুলির জন্য, আপনি একটি অনুসন্ধান ক্ষেত্র (বা টেবিল) যুক্ত করে উপকৃত হন। আবার, আমি জানি এটি সম্ভবত সবার কাছে সুস্পষ্ট, আমি কেবল এটি উল্লেখ করেছি কারণ আমি অতীতে এমন বৈশ্বিক ডেটা সেটগুলির মুখোমুখি হয়েছিল যা কেবলমাত্র স্থানিকভাবে সূচকযুক্ত ছিল এবং যেখানে একটি সাধারণ জিজ্ঞাসা ছিল "একটি দেশের সমস্ত বৈশিষ্ট্য"। আমরা একটি ইনডেক্সযুক্ত কান্ট্রি-ফিপস ফিল্ড যুক্ত করে প্রচুর পারফরম্যান্স অর্জন করেছি।

নীচে এক্সপ্ল্যান অ্যানালাইজের কিছু ফলাফল রয়েছে যা বিষয়টি প্রমাণ করে। (দ্রষ্টব্য: আমি একটি বিবিএক্স ক্যোয়ারী ব্যবহার করে যথাসম্ভব দক্ষতর স্থান তৈরি করার চেষ্টা করেছি the রাষ্ট্রীয় রূপরেখাগুলি ব্যবহার কেবল এটিকে আরও ধীর করে দিয়েছিল))

# explain analyze select count(*) from gnis_names where state_alpha = 'AK';
Aggregate  (cost=57359.45..57359.46 rows=1 width=0) (actual time=76.606.. 76.607 rows=1 loops=1)
<snip>
Total runtime: 76.676 ms

# explain analyze select count(*) from gnis_names where the_geom && GeomFromText('POLYGON((-179.14734 51.219862,-179.14734 71.3525606439998,179.77847 71.3525606439998,179.77847 51.219862,-179.14734 51.219862))',4326);
Aggregate  (cost=27699.86..27699.87 rows=1 width=0) (actual time=86.523..86.524 rows=1 loops=1)
<snip>
Total runtime: 86.584 ms 

এটার জন্য তোমাকে অনেক ধন্যবাদ. আপনি এটি বলার সময় এটি স্পষ্ট বলে মনে হতে পারে, তবে আমার প্রথম চিন্তাটি কেবলমাত্র কোনও গুনের জন্য নয় একটি স্থানিক জিজ্ঞাসা চালানো হবে। এই জন্য +1!
ম্যাপোহোলিক

0

শুধু এই বিবৃতি লক্ষ্য

আমার কাছে এটি বোধগম্য হয়। আপনি একটি স্থানিক জিজ্ঞাসা চালান = আপনার অবশ্যই একটি স্থানিক সূচক থাকতে হবে

আমার কাছে এটি মোটেই বোঝা যায় না এবং আমি মনে করি এসকিউএল সার্ভার এবং পোস্টগিস উভয়ই আরও ভাল কাজ করে বা কমপক্ষে আপনাকে পারফরম্যান্সের বিশদ নিয়ে বিরক্ত করবে না। প্রকৃতপক্ষে, এসকিউএল সার্ভার এবং পোস্টগিস উভয়ই কখনও কখনও স্থানিক সূচকটি মোটেও ব্যবহার করে না (পূর্ণ টেবিল স্ক্যানটিতে ফিরুন)।

ওরাকল-এর জন্য আপনাকে অবশ্যই সূচি তৈরি করতে হবে এবং তাই আপনাকে অবশ্যই ব্যবহারকারী_সডো_জোম_মেটাডেটা পূরণ করতে হবে।

কেবল এটি বর্ণানুক্রমিক সূচকের সাথে তুলনা করে, তারা কার্য সম্পাদনের কারণে রয়েছে, আপনার এসকিউএল স্টেটমেন্টটি এটির সাথে বা এটি ছাড়া কাজ করা উচিত।

একটি ওরাকল ডাটাবেসে সূচিটি ফেলে দিন এবং আপনি প্রচুর ত্রুটি এবং অ্যাপ্লিকেশনগুলি পাবেন যা স্থানিক ক্যোয়ারী ব্যবহার করতে সক্ষম হবে না, কাজেই ব্যর্থ হয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.