簡體   English   中英

按日期加入時查詢緩慢(日歷表)

[英]Slow query when joining by date (calendar table)

我正在嘗試實施此解決方案

我有聯系人和日歷表。 聯系人的created_at時間戳列,日歷的date列是日期。

所以查詢:

select contacts.id, calendar.date
from contacts
right join calendar on date(contacts.created_at) = calendar.date

永遠不會完成。

我讀過date(contacts.created_at)會減慢它的速度,一種可能的解決方案是將created_at列分為兩列: datetime 但是我不喜歡這種解決方案,因為我需要時間戳列。 還有其他方法可以處理這種情況嗎?

基本上,這是一個著名的問題,當您獲得一些帶有日期的統計信息並且您需要用零填充日期間隔時。 因此,也許值得嘗試用PHP處理此問題...

您可以使用生成的列來存儲created_at列的日期部分:

ALTER TABLE contacts
ADD created_at_date AS (date(created_at)) STORED;

然后,您可以照常在此列上JOIN

注意,生成的列在MySQL 5.7.5及更高版本中可用。

我猜您在created_at上有索引,但是使用date()優化器的那一刻不能使用該索引,因為這是一個不同的字段。

因此,如果您在聯系人上創建日期列而不是可以建立索引,那會更好

或者嘗試:

select contacts.id, calendar.date
from contacts
right join calendar 
   on contacts.created_at >= calendar.date
  and contacts.created_at < DATE(DATE_ADD(calendar.date, INTERVAL -1 DAY))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM