2015-04-19 47 views
2

通常,我的表格包含一個DATE列,當它永久爲空時是0000-00-00。添加一個額外的列TINYINT是否更好,以追蹤該行是否永久活動,所以我的搜索性能會更好?或者我應該只保留DATE列嗎?MySQL性能:DATE vs TINYINT

SELECT columns FROM table_name WHERE date_is != '0000-00-00' 

SELECT columns FROM table_name WHERE col_emplty != '1' 

TINYINT應搜索速度更快,不應該嗎?

+1

可能會更快,但您已添加一層冗餘。爲什麼不做最好的設計,讓你的dbms關注性能? – kero

回答

4

如果您希望可以將日期列的默認值設置爲空。所以,你只需要檢查數據是否爲IS NOT NULL,因爲增加一個額外的列來查看下一列是否有適當的日期格式,這是沒有意義的。

+0

與'null'比較''不適用於'<>'。你必須使用'IS'運營商 –

+0

@juergend謝謝,我忘了。 –

+0

感謝您的答案,但你認爲+ 1列與1字節將傷害表! 0000-00-00將只是永久的,但在搜索結果中,我必須避免這種情況,並且桌子的設計非常好。但想象一下,它將包含更多10K記錄的示例表,並且我必須選擇不爲NULL'0000-00-00'的行。如果檢查日期IS NOT NULL會更快,那麼TINYINT在哪裏clouse!? – Mendi

-1

添加一個新的領域允許空一列將解決您的問題,但都沒有一個好的做法。

如果99%的時間您要根據日期(可以是任何日期的默認日期)選擇數據或要更新此日期字段,您可以在此處執行的操作是創建一個int列而不是日期鍵入並保留爲yyyymmdd(例如:而不是保留'2015-04-19'(日期)保持數據爲20150419(10000 *年+ 100 *月+日期)並比較日期值),因爲這是一個int列搜索和更新表將會很快。

+0

你不覺得你在做這個過程嗎?特別是當「日期」數據類型已經存在時,爲什麼不使用默認進程而不是重新發明輪子。 –

+0

我不這麼認爲。如果你有大量的數據,你知道你必須在日期的where子句中應用,那麼這個過程會更好。 –