মাইএসকিএলে ডেটটাইম ফিল্ডটি সূচী করা কি ভাল ধারণা?


137

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

Select field1, field2,.....,field15
from table where field 20 between now() and now + 30 days 

আমি আমার ডাটাবেসটি ভালভাবে চালিয়ে যাওয়ার চেষ্টা করছি এবং প্রশ্নগুলি সহজেই চালিত হচ্ছে

আরও, আপনি কী ভাবেন যে আমার একটি উচ্চ দক্ষতার ডেটাবেস তৈরি করা উচিত?


উত্তর:


164

মাইএসকিউএল বিভিন্ন অবস্থার মধ্যে সারি নির্মূল সহ বিভিন্ন কারণে সূচী ব্যবহার করার পরামর্শ দেয়: http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

এটি আপনার ডেটটাইম কলামকে একটি সূচকের জন্য দুর্দান্ত প্রার্থী করে তোলে যদি আপনি প্রায়শই জিজ্ঞাসায় শর্তে এটি ব্যবহার করছেন। যদি আপনার একমাত্র শর্তটি থাকে BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 30 DAY)এবং শর্তে আপনার অন্য কোনও সূচক না থাকে তবে মাইএসকিউএলকে প্রতিটি ক্যোয়ারীতে একটি পূর্ণ টেবিল স্ক্যান করতে হবে । আমি নিশ্চিত না যে 30 দিনের মধ্যে কতগুলি সারি তৈরি হচ্ছে, তবে যতক্ষণ না এটি মোট সারির প্রায় 1/3 অংশের চেয়ে কম তবে এটি কলামে একটি সূচক ব্যবহার করা আরও কার্যকর হবে।

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


3
ব্যাখ্যা করার জন্য আপনাকে ধন্যবাদ. এটা সত্যিই সাহায্য। আমি নিশ্চিত যে এটিতে আরও ফিল্টার থাকবে। আমি কেবলমাত্র তা নিশ্চিত করতে চাই যে তারিখের সময় সূচী তৈরি করা ভাল ধারণা বা না যেমন আমাদের নকলের তারিখের সময় থাকতে পারে not তবে আপনি উত্তরটি ব্যাখ্যা করেছেন :) আপনাকে ধন্যবাদ
জেইলেন

4
'যোগদানের ক্ষেত্রে এবং যেখানে ক্লজ' ব্যবহার করে তাদের জন্য +1। ইনডেক্সিং কৌশলের জন্য থাম্বের দুর্দান্ত নিয়ম। স্পষ্টত আমি এখন এটি সম্পর্কে ভাবছি, তবে আমার আগে
এমনটি ঘটেনি

1
তবে আপনি যদি ডেট রেঞ্জের সাথে ডেটা কোয়েরি করেন যেমন "2017-01-01 11:20" থেকে "2018-01-03 12:12" পর্যন্ত ডেটা ব্যাপ্তি, আমি কলামকে সূচিযুক্ত করেও তা SELECTকোয়েরিটি দ্রুত করে না date time। .. সূচকগুলি যখন আমি equalঅপারেশন ব্যবহার করি তখন ক্যোয়ারী দ্রুত করে তোলে .. আমি ঠিক আছি?
ব্যবহারকারী 3595632

1
DAY (ডেটটাইম) বা এইচআর (ডেটটাইম) এর মতো টাইম ফাংশন সহ ডেটটাইম ক্ষেত্রগুলি অনুসন্ধান করা কীভাবে হয় How এই ক্ষেত্রে সূচি সাহায্য করবে বা বাধা দেবে?
ক্রোনোকলি

হাই @ এক্সপ্লোশন পিলস, যদি আমাকে কেবল বছর এবং মাসে টেবিল বেসটি জিজ্ঞাসা করা দরকার, আমি কেবলমাত্র এক বছর এবং মাসের সাথে একটি নতুন কলাম তৈরি করেছি, তবে ডেটটাইম কলামের সরাসরি সূচি তৈরির পরিবর্তে এটি সূচী করবো I ? যেমন আমি একটি কলাম তৈরি করি যার মূল্য 201801 এর মতো
উডস চেন

18

এখানে লেখক পরীক্ষা করে দেখিয়েছেন যে ডেটটাইমের চেয়ে পূর্ণসংখ্যার ইউনিক্স টাইমস্ট্যাম্প ভাল। দ্রষ্টব্য, তিনি মাইএসকিউএল ব্যবহার করেছেন। তবে আপনি যে ডিবি ইঞ্জিনটি তুলনা করে পূর্ণসংখ্যার ব্যবহার করেন তা তারিখের সাথে তুলনা করার তুলনায় কিছুটা দ্রুততর হয় তাই ডেটটাইম সূচকের চেয়ে সূচী ভাল no টি 1 - 2 তারিখের তুলনার সময়, টি 2 - 2 পূর্ণসংখ্যার তুলনা করার সময় নিন। সূচিকৃত ক্ষেত্রের অনুসন্ধানে প্রায় O (লগ (সারি)) সময় লাগে কারণ কিছু ভারসাম্য গাছের উপর ভিত্তি করে সূচক - এটি বিভিন্ন ডিবি ইঞ্জিনের জন্য আলাদা হতে পারে তবে যাইহোক লগ (সারি) সাধারণ অনুমান। (যদি আপনি বিটমাস্ক বা আর-ট্রি ভিত্তিক সূচক ব্যবহার না করেন)। সুতরাং পার্থক্যটি হল (টি 2-টি 1) * লগ (সারি) - আপনি প্রায়শই আপনার জিজ্ঞাসাটি সম্পাদন করলে ভূমিকা নিতে পারে।


ধন্যবাদ. আমি বিকল্প হিসাবে সে সম্পর্কে ভাবছিলাম কিন্তু কীভাবে এটি ব্যবহার করা যায় তা জানতাম না। আমি বিশ্বাস করি যে আপনি একেবারে সঠিক পূর্ণসংখ্যা সবসময় দ্রুত।
জেলেন

62
উত্তম? আমি সন্দেহ করি যে একটি ইউনিক্স টাইমস্ট্যাম্প সব ক্ষেত্রেই ভাল । হ্যাঁ, একটি পূর্ণসংখ্যা সংরক্ষণ করা স্ট্রিং সংরক্ষণের চেয়ে সাধারণত দ্রুত হয় তবে মাইএসকিউএল প্রকাশিত সমস্ত ডেটটাইম ফাংশনগুলির কী? এগুলি নিজে প্রয়োগ করা হয় হয় কর্মক্ষমতা বা কার্যকারিতার উপর নেতিবাচক প্রভাব ফেলবে।
গ্রেগ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.