আমি এটি বিভিন্ন শিষ্টাচারে চেষ্টা করেছি এবং আমি যে সেরা পারফরম্যান্স পেয়েছি তা হল এই সাধারণ প্রশ্নটি:
select a.id+1 gapIni
,(select x.id-1 from arrc_vouchers x where x.id>a.id+1 limit 1) gapEnd
from arrc_vouchers a
left join arrc_vouchers b on b.id=a.id+1
where b.id is null
order by 1
;
... পরের আইডিটি উপস্থিত রয়েছে কিনা তা পরীক্ষা করতে একটি বাম যোগ দিন , কেবল যদি পরবর্তীটি পাওয়া না যায় তবেই সাবকিউরিটি পরবর্তী আইডিটি খুঁজে পায় যা ফাঁক শেষের সন্ধান করতে পারে। আমি এটি করেছি কারণ সমান (=) এর সাথে ক্যোয়ারী (>) অপারেটরের চেয়ে বড় পারফরম্যান্স ।
স্কেলফিল্ড ব্যবহার করে এটি অন্যের ক্যোয়ারের মতো আলাদা পারফরম্যান্স প্রদর্শন করে না তবে একটি বাস্তব ডাটাবেসে এই কোয়েরিতে উপরের ফলাফলটি অন্যদের চেয়ে 3 গুণ বেশি দ্রুত fast
স্কিমা:
CREATE TABLE arrc_vouchers (id int primary key)
;
INSERT INTO `arrc_vouchers` (`id`) VALUES (1),(4),(5),(7),(8),(9),(10),(11),(15),(16),(17),(18),(19),(20),(21),(22),(23),(24),(25),(26),(27),(28),(29)
;
পারফরম্যান্সের তুলনা করতে আমি যে সমস্ত জিজ্ঞাসা করেছি সেগুলি অনুসরণ করুন:
select a.id+1 gapIni
,(select x.id-1 from arrc_vouchers x where x.id>a.id+1 limit 1) gapEnd
from arrc_vouchers a
left join arrc_vouchers b on b.id=a.id+1
where b.id is null
order by 1
;
select *, (gapEnd-gapIni) qt
from (
select id+1 gapIni
,(select x.id from arrc_vouchers x where x.id>a.id limit 1) gapEnd
from arrc_vouchers a
order by id
) a where gapEnd <> gapIni
;
select id+1 gapIni
,(select x.id from arrc_vouchers x where x.id>a.id limit 1) gapEnd
#,coalesce((select id from arrc_vouchers x where x.id=a.id+1),(select x.id from arrc_vouchers x where x.id>a.id limit 1)) gapEnd
from arrc_vouchers a
where id+1 <> (select x.id from arrc_vouchers x where x.id>a.id limit 1)
order by id
;
select id+1 gapIni
,coalesce((select id from arrc_vouchers x where x.id=a.id+1),(select x.id from arrc_vouchers x where x.id>a.id limit 1)) gapEnd
from arrc_vouchers a
order by id
;
select id+1 gapIni
,coalesce((select id from arrc_vouchers x where x.id=a.id+1),concat('*** GAT *** ',(select x.id from arrc_vouchers x where x.id>a.id limit 1))) gapEnd
from arrc_vouchers a
order by id
;
হতে পারে এটি কাউকে সাহায্য করে এবং দরকারী।
আপনি আমার স্কোরিফিল্ডটি ব্যবহার করে আমার ক্যোয়ারীটি দেখতে এবং পরীক্ষা করতে পারেন :
http://sqlfiddle.com/#!9/6bdca7/1