Sql-Server

MySQL - 使用兩張表的建議,一張用於打開和關閉的記錄?

  • November 2, 2019

我正在將應用程序從 ASP/MSSQL Server 2008 遷移到 PHP/MySQL。在之前的應用程序中,我有一個對象使用多個連接和具有數十萬條記錄的高級搜尋查詢。我將記錄拆分為“table1”和“table1_closed”,這樣我就可以保持打開記錄表的速度。這極大地加快了查詢速度(關閉的表慢了幾個數量級),但導致了一些奇怪的解決方法,允許將關閉的記錄移回打開的記錄表(手動鎖定等)。不用說它是hacky和buggy。

我的問題是,在 MySQL 中,是否有人認為需要繼續這樣做,或者您會將兩個表合併回一個並僅使用索引欄位來區分?MySQL 是否更擅長在非常大的記錄集上進行連接的高級查詢?

來自評論:

Select  t1.*, t2.*, t3.*
   from  properties t1
   Join  inspection_groups t2  ON t1.id = t2.property_id
   Join  inspection_types t3  ON t2.inspection_type_id = t3.id
   where  (      t1.address = 'x'
             or  t1.city = 'x'
          )
     And  t2.inspection_type_id = 1
     And  t2.is_active = 1
   ORDER BY  t2.created_at DESC
   LIMIT  1,12 

添加一列以區分打開/關閉。它應該很小(TINYINTENUM)。

然後選擇一個:

計劃A:

然後讓大多數索引成為複合索引並該列開始。這些索引將使查找剛剛打開(或剛剛關閉)的行變得高效。

如果您還需要同時查找打開和關閉,那麼還有不以新標誌開頭的索引。

B計劃:

PARTITION由新列。

引用自:https://dba.stackexchange.com/questions/252156