আমার কাছে 7.2 মিলিয়ন টিপলসযুক্ত একটি টেবিল রয়েছে যা দেখতে এটির মতো দেখাচ্ছে:
table public.methods
column | type | attributes
--------+-----------------------+----------------------------------------------------
id | integer | not null DEFAULT nextval('methodkey'::regclass)
hash | character varying(32) | not null
string | character varying | not null
method | character varying | not null
file | character varying | not null
type | character varying | not null
Indexes:
"methods_pkey" PRIMARY KEY, btree (id)
"methodhash" btree (hash)
এখন আমি কয়েকটি মান নির্বাচন করতে চাই তবে ক্যোয়ারীটি অবিশ্বাস্যরূপে ধীর:
db=# explain
select hash, string, count(method)
from methods
where hash not in
(select hash from nostring)
group by hash, string
order by count(method) desc;
QUERY PLAN
----------------------------------------------------------------------------------------
Sort (cost=160245190041.10..160245190962.07 rows=368391 width=182)
Sort Key: (count(methods.method))
-> GroupAggregate (cost=160245017241.77..160245057764.73 rows=368391 width=182)
-> Sort (cost=160245017241.77..160245026451.53 rows=3683905 width=182)
Sort Key: methods.hash, methods.string
-> Seq Scan on methods (cost=0.00..160243305942.27 rows=3683905 width=182)
Filter: (NOT (SubPlan 1))
SubPlan 1
-> Materialize (cost=0.00..41071.54 rows=970636 width=33)
-> Seq Scan on nostring (cost=0.00..28634.36 rows=970636 width=33)
hash
কলামের MD5 হ্যাশ হয় string
এবং একটি সূচক হয়েছে। সুতরাং আমি আমার সমস্যাটি মনে করি যে পুরো টেবিলটি আইডি দ্বারা বাছাই করা হয় হ্যাশ দ্বারা নয়, তাই এটি প্রথমে বাছাই করতে কিছুক্ষণ সময় নেয় এবং তারপরে এটি গোষ্ঠীভূত করে?
টেবিলটিতে nostring
আমি চাই না এমন হ্যাশগুলির কেবলমাত্র একটি তালিকা রয়েছে। তবে সমস্ত মান রাখতে আমার উভয় টেবিলের প্রয়োজন। সুতরাং এগুলি মুছতে কোনও বিকল্প নয়।
অতিরিক্ত তথ্য: কলামগুলির কোনওটিই শূন্য হতে পারে না (এটি সারণির সংজ্ঞা অনুসারে স্থির করা হয়েছে) এবং আমি পোস্টগ্রেস্কল 9.2 ব্যবহার করছি।
NULL
কলামে মানগুলির শতাংশ কতmethod
? অনুলিপি আছেstring
?