এসকিউএল সার্ভারের কোয়েরি ধীরে ধীরে পেজিনেট করা হয়


14

এসকিউএল সার্ভার ২০১২-তে নিম্নলিখিত টি-এসকিউএল কোয়েরির সাথে আমি কিছু অদ্ভুত আচরণ দেখছি:

SELECT Id 
FROM dbo.Person 
WHERE CONTAINS(Name, '"John" AND "Smith"')
ORDER BY Name

এই ক্যোয়ারীটি একাই কার্যকর করা আমাকে প্রায় দুই সেকেন্ডেরও কম সময়ে প্রায় 1,300 ফলাফল দেয় (এখানে একটি পূর্ণ পাঠ্য সূচক রয়েছে Name)

যাইহোক, যখন আমি এইটিতে ক্যোয়ারীটি পরিবর্তন করি:

SELECT Id 
FROM dbo.Person 
WHERE CONTAINS(Name, '"John" AND "Smith"')
ORDER BY Name
OFFSET 0 rows
FETCH NEXT 10 ROWS ONLY

আমাকে 10 টি ফলাফল দিতে 20 সেকেন্ডের বেশি সময় লাগে।

নিম্নলিখিত কোয়েরিটি আরও খারাপ:

SELECT Id 
FROM ( 
    SELECT ROW_NUMBER() OVER (ORDER BY Name) AS RowNum, Id 
    FROM dbo.Person
    WHERE CONTAINS(Name, '"John" AND "Smith"') ) AS RowConstrainedResult 
WHERE RowNum >= 0 AND RowNum < 11 
ORDER BY RowNum

এটি শেষ হতে 1.5 মিনিটেরও বেশি সময় নেয়!

কোন ধারনা?

ধীর পরিকল্পনা

ধীরে

দ্রুত পরিকল্পনা

দ্রুত


আপনি যদি দ্বিতীয় প্রশ্নটি পরিবর্তন করেন তবে কী হবে SELECT TOP 10 * .... ORDER BY Name?
লামাক

কোন কলামে সূচী IX_PersonSearch করা হয় ...? আপনি একটি চাবি খুঁজছেন কারণ আপনি টেবিল থেকে * নির্বাচন করছেন এবং ব্যবহৃত সূচীতে সমস্ত আউটপুট কলাম নেই। আমি মনে করি আপনার কেবলমাত্র কলামগুলি নির্বাচন করা উচিত এবং তারপরে সেগুলি অন-ক্লাস্টারযুক্ত সূচীতে অন্তর্ভুক্ত কলাম হিসাবে অন্তর্ভুক্ত করা উচিত, সূচি কলামগুলি নয়।
মার্সেল এন।

আপনি কি টেবিলের উপর সূচকগুলি পোস্ট করতে পারেন (স্ক্রিপ্ট তৈরি করুন)?

3
আইডি সর্বদা প্রতিটি অবিচ্ছিন্ন সূচকে অন্তর্ভুক্ত থাকে। এসকিউএল সার্ভারটি কীভাবে লুকে দেখার জন্য সক্ষম (আইডি দ্বারা)।
usr ডিরেক্টরির

1
আমি যা উল্লেখ করতে ভুলে গেছি: আমি যখন একই অনুরোধটি কন্টেন্টগুলির পরিবর্তে লাইক দিয়ে করি তখন খুব দ্রুত। (পত্রাঙ্কিততে বা না হোক)

উত্তর:


7

যেহেতু আপনি কেবল TOP 10নাম অনুসারে অর্ডার করতে চান তা মনে করে nameক্রম অনুসারে সূচকে কাজ করা আরও দ্রুত হবে এবং প্রতিটি সারিটি মেলে কিনা তা দেখার জন্যCONTAINS(Name, '"John" AND "Smith"') ) প্রাক্কলকের সাথে ।

সম্ভবত এটি প্রত্যাশিত 10 টি মিল খুঁজে পেতে আরও অনেক সারি লাগবে এবং এই কার্ডিনালিটি ইস্যুটি মূল অনুসন্ধানগুলির সংখ্যার সাথে মিশ্রিত হবে।

একটি দ্রুত হ্যাক এই পরিকল্পনা ব্যবহার পরিবর্তন করতে হবে এটা বন্ধ করার ORDER BYজন্য ORDER BY Name + ''যদিও ব্যবহার CONTAINSTABLEসাথে FORCE ORDERআরো কাজ করা উচিত।


3

এটিকে ক্লাসিক নির্বাচন বাছাইয়ের মতো দেখাচ্ছে। ক্যোয়ারীর "ড্রাইভার" হিসাবে এটি সম্পর্কে কী করা যায় তা নিশ্চিত নন এমন ফুলটেক্সট অনুসন্ধান যা আপনি পরিসংখ্যানের সাহায্যে বৃদ্ধি করতে পারবেন না।

where containsকোনও inner join containstable( কন্টেইনস্টাবল ) এ প্রিডিটকে আবার লেখার চেষ্টা করুন এবং পরিকল্পনার আকারটি জোর করার জন্য জয়েন অর্ডার ইঙ্গিতগুলি প্রয়োগ করুন।

এটি একটি নিখুঁত সমাধান নয় কারণ এটির রক্ষণাবেক্ষণ সংক্রান্ত সমস্যা রয়েছে তবে আমি অন্য কোনও উপায় দেখতে পাচ্ছি না।


আপনার উত্তরের জন্য ধন্যবাদ, আমি চেষ্টা করেছিলাম। যদিও একই ফলাফল: পৃষ্ঠাগুলি ব্যবহার না করে, ক্যোয়ারীটি সত্যই দ্রুত। যখন এটির

ঠিক আছে আপনি কি কোনও চিত্র এবং আপনার ক্যোয়ারী হিসাবে পরিকল্পনা পোস্ট করতে পারেন? আমার অনুমান যে আমরা এখনও পছন্দসই আকারটি তৈরি করতে সফল হই নি।
usr ডিরেক্টরির

3

আমি সমস্যার সমাধান করতে পেরেছি:

আমি যেমন প্রশ্নে বলেছি প্রতিটি কলামের জন্য সমস্ত কলাম + পরিসংখ্যানের উপর সূচি ছিল। (উত্তরাধিকারের মতো প্রশ্নগুলির কারণে) আমি সমস্ত পরিচয় এবং পরিসংখ্যান সরিয়েছি, পূর্ণ পাঠ্য অনুসন্ধান এবং ভয়েলি যুক্ত করেছি, ক্যোয়ারীটি সত্যিই দ্রুত হয়ে উঠেছে।

দেখে মনে হচ্ছে উদ্বোধনগুলি একটি ভিন্ন নির্বাহী পরিকল্পনার দিকে পরিচালিত করেছিল।

আপনার সাহায্যের জন্য আপনাকে অনেক ধন্যবাদ!


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