আমি এখন প্রায় এক ঘন্টার জন্য নিম্নলিখিত সমস্যাটি সমাধান করার চেষ্টা করেছি এবং এখনও এটির সাথে আর পাইনি।
ঠিক আছে, আমার কাছে একটি টেবিল রয়েছে (মাইআইএসএএম):
+---------+-------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| http | smallint(3) | YES | MUL | 200 | |
| elapsed | float(6,3) | NO | | NULL | |
| cached | tinyint(1) | YES | | NULL | |
| ip | int(11) | NO | | NULL | |
| date | timestamp | NO | MUL | CURRENT_TIMESTAMP | |
+---------+-------------+------+-----+-------------------+----------------+
অনুগ্রহ করে কিছু মনে করবেন না, আমি সমাধান খুঁজে বের করার চেষ্টা করছি। এখন, আমার জিজ্ঞাসা এখানে।
SELECT http,
COUNT( http ) AS count
FROM reqs
WHERE DATE(date) >= cast(date_sub(date(NOW()),interval 24 hour) as datetime)
GROUP BY http
ORDER BY count;
টেবিলটি ইনকামিং ওয়েব রিকোয়েস্ট সম্পর্কিত তথ্য সংরক্ষণ করছে যাতে এটির পরিবর্তে এটি একটি বড় ডাটাবেস।
+-----------+
| count(id) |
+-----------+
| 782412 |
+-----------+
নোট করুন যে প্রাথমিক কী সেট করার আর ভাল উপায় আর নেই কারণ আইডি কলামটি আমার একমাত্র অনন্য শনাক্তকারী হবে। উপরে উল্লিখিত ক্যোয়ারিটি চালাতে প্রায় 0.6-1.6 সেকেন্ড সময় নেয়।
কোন সূচকটি চালাক হবে? আমি অনুভব করেছি যে সূচীকরণের তারিখটি আমাকে "খারাপ" কার্ডিনালিটি দেবে এবং এভাবে মাইএসকিউএল এটি ব্যবহার করবে না। HTTPশুধুমাত্র প্রায় 20 টি বিভিন্ন সম্ভাব্য মান রয়েছে বলে একটি খারাপ পছন্দ।
আপনার সহযোগিতার জন্য ধন্যবাদ!
1 আপডেট করুন আমি ইপারকিউবের পরামর্শ অনুসারে (HTTP, তারিখ) তে একটি সূচক যুক্ত করেছি :
mysql> CREATE INDEX httpDate ON reqs (http, date);
এবং তার ক্যোয়ারী ব্যবহার করেছে, তবে এটি সমানভাবে খারাপ অভিনয় করেছে। যুক্ত সূচক:
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| reqs | 0 | PRIMARY | 1 | id | A | 798869 | NULL | NULL | | BTREE | |
| reqs | 1 | httpDate | 1 | http | A | 19 | NULL | NULL | YES | BTREE | |
| reqs | 1 | httpDate | 2 | date | A | 99858 | NULL | NULL | | BTREE | |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
এবং ব্যাখ্যা
+----+--------------------+-------+-------+---------------+----------+---------+------+-------+-----------------------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------------+-------+-------+---------------+----------+---------+------+-------+-----------------------------------------------------------+
| 1 | PRIMARY | r | range | NULL | httpDate | 3 | NULL | 20 | Using index for group-by; Using temporary; Using filesort |
| 2 | DEPENDENT SUBQUERY | ri | ref | httpDate | httpDate | 3 | func | 41768 | Using where; Using index |
+----+--------------------+-------+-------+---------------+----------+---------+------+-------+-----------------------------------------------------------+
মাইএসকিউএল সার্ভার সংস্করণ:
mysql> SHOW VARIABLES LIKE "%version%";
+-------------------------+---------------------+
| Variable_name | Value |
+-------------------------+---------------------+
| protocol_version | 10 |
| version | 5.1.73 |
| version_comment | Source distribution |
| version_compile_machine | x86_64 |
| version_compile_os | redhat-linux-gnu |
+-------------------------+---------------------+
5 rows in set (0.00 sec)
http
কলামটি বাতিল হওয়ার সাথে করতে পারে । আমি কাল খতিয়ে দেখব, সময় পেলে।
http NOT NULL
) এবং সমস্ত ডেটা এটি কপি (HTTP শূন্য অবশ্যই সঙ্গে সারি ব্যতীত।)