कृपया इस तालिका को देखें:
mysql> desc s_p;
+-------------------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| s_pid | int(10) unsigned | YES | MUL | NULL | |
| sm_id | int(10) unsigned | YES | MUL | NULL | |
| m_id | int(10) unsigned | YES | | NULL | |
| created | datetime | YES | | NULL | |
| s_date | datetime | YES | | NULL | |
| estimated_date | datetime | YES | MUL | NULL | |
+-------------------------+------------------+------+-----+---------+----------------+
अब इन प्रश्नों पर एक नज़र डालें:
mysql> select count(*) from s_p where estimated_date is null;
+----------+
| count(*) |
+----------+
| 190580 |
+----------+
1 row in set (0.05 sec)
mysql> select count(*) from s_p where estimated_date is not null;
+----------+
| count(*) |
+----------+
| 35640 |
+----------+
1 row in set (0.07 sec)
mysql> select count(*) from s_p;
+----------+
| count(*) |
+----------+
| 1524785 |
+----------+
ऊपर की गणनाएँ मेल नहीं खा रही हैं। जबकि मेरी समझ के अनुसार:
काउंट के साथ IS NULL
और काउंट विद IS NOT NULL
काउंट तब बराबर होना चाहिए, जब क्लॉज के बिना गणना की जाए।
यहाँ क्या हो रहा है पर कोई विचार?
================================================== =
अपडेट 17 फरवरी 2012 को
चूंकि, मैंने पाया कि बहुत से लोग इस तरह के मूल्यों के बारे में पूछ रहे हैं जो वर्तमान में अनुमानित_डेट के प्रकार हैं। यहाँ जवाब है:
mysql> select distinct date(estimated_date) from s_p;
+----------------------+
| date(estimated_date) |
+----------------------+
| NULL |
| 2012-02-17 |
| 2012-02-20 |
| 2012-02-21 |
| 2012-02-22 |
| 2012-02-23 |
| 2012-02-24 |
| 2012-02-27 |
| 2012-02-28 |
+----------------------+
9 rows in set (0.42 sec)
जैसा कि आप ऊपर देख सकते हैं अनुमानित या तो NULL या एक मान्य डेटाइम मान है। कोई शून्य या खाली तार नहीं हैं ""।
क्या यह (मूल मुद्दा) हो सकता है अगर अनुमानित_डैट पर सूचकांक में कुछ समस्या है / है?
================================================== =
अपडेट 18 फरवरी 2012 को
यहां शो क्रिएट टेबल आउटपुट है:
| s_p | CREATE TABLE `s_p` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`s_id` int(10) unsigned DEFAULT NULL,
`sm_id` int(10) unsigned DEFAULT NULL,
`m_id` int(10) unsigned DEFAULT NULL,
`created` datetime DEFAULT NULL,
`estimated_date` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `sm_id` (`sm_id`),
KEY `estimated_date_index` (`estimated_date`) USING BTREE,
) ENGINE=InnoDB AUTO_INCREMENT=1602491 DEFAULT CHARSET=utf8 |
फिर, मैं यहाँ केवल अनुमानित_दाह पर सूचकांक पर संदेह कर सकता हूँ।
इसके अलावा, mysql सर्वर संस्करण 5.5.12 है।
select count(*)
और नहीं कर रहे हैं select count(estimated_date)
? ये दोनों अलग-अलग परिणाम लौटाएंगे क्योंकि NULLs को अनदेखा किया जाता है यदि केवल वही चीज़ है जिसे आप गिन रहे हैं।
SELECT COUNT(*),SUM(CASE WHEN estimated_date IS NULL THEN 1 ELSE 0 END),SUM(CASE WHEN estimated_date IS NOT NULL THEN 1 ELSE 0 END) from s_p
- जो कि एक बार में सभी काउंट प्राप्त करें।
CHECK TABLE
पर चल सकते हैं ? बेतहाशा बड़ी पूर्ण पंक्ति गिनती को ध्यान में रखते हुए , मुझे लगता है कि DELETE
कहीं पागल हो गया है।