Sql-Server
MySQL - 使用兩張表的建議,一張用於打開和關閉的記錄?
我正在將應用程序從 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
添加一列以區分打開/關閉。它應該很小(
TINYINT
或ENUM
)。然後選擇一個:
計劃A:
然後讓大多數索引成為複合索引並從該列開始。這些索引將使查找剛剛打開(或剛剛關閉)的行變得高效。
如果您還需要同時查找打開和關閉,那麼還有不以新標誌開頭的索引。
B計劃:
PARTITION
由新列。