2010-04-24 70 views
0

我有一個用於安排某些事件的應用程序。所有這些事件必須在每個計劃的時間後進行審查。SQL:優化日期時間字段上的密集型選擇

所以基本上我們有3個表:

  • 項目(ID,姓名)
  • scheduled_itemsiditem_idexecute_at - 日期時間) - ITEM_ID列有索引選項。
  • reviewed_itemsid,item_id,created_at - datetime) - item_id列有一個索引選項。

因此,該應用程序的核心功能是「給我任何項目(尚未審查)的實際時刻」。

我該如何優化此解決方案速度(因爲它是非常核心的業務功能而不是微型優化)?

我認爲將索引添加到日期時間字段沒有任何意義,因爲該字段的基數或唯一性非常高,並且索引不會給出任何(?)加速。這是對的嗎?

你會推薦什麼?我應該嘗試不使用SQL嗎?

-

mysql -V 
5.075 

我使用緩存(Memcached的),其中它使SENCE。

已更新。

+0

你使用什麼類型的緩存,memcached或反向代理? – 2010-04-24 08:56:02

+0

我使用memcached。 – ep3static 2010-04-24 09:00:48

+1

高基數意味着數據非常有選擇性,並且索引肯定會有所幫助。它是低基數列,它不會被使用。 – 2010-04-24 09:33:06

回答

1

我想你實際上想要的是計劃的項目,但沒有審查後的調度?

不應該將評論連接到預定的項目,而不是與項目不一致?現在您必須比較日期,以查看在一個預定項目之後但在下一個預定項目之後出現哪些評論。此外,如果某個項目在兩次之間短時間內排定,則最終可能會包含屬於第二個排定的兩個評價。

隨着這一變化,你可以輕鬆地挑出來的未經審覈schedulings:

select i.id, i.name, s.execute_at 
from items i 
inner join scheduled_items s on s.item_id = i.id 
left join reviewed_items r on r.scheduled_items_id = s.id 
where r.id is null 

至於你的問題:

我想,添加索引到 日期時間字段沒有任何意義 ,因爲該字段上的基數或唯一性 非常高且索引 不會給出任何(?)加速。它是 是否正確?

不,這是不正確的。如果基數很高,則索引可能很有用。默認情況下爲表格的唯一ID創建一個索引,這當然可能具有最高的基數。

+0

感謝Göran提供了一個有趣的答案! – ep3static 2010-04-24 10:35:23

相關問題