mirror of
https://github.com/itflow-org/itflow
synced 2026-08-28 18:35:17 +00:00
Add indexes on the client-scoped columns (db 2.7.5)
None of the *_client_id columns carried an index, so agent/includes/inc_all_client.php was doing a full table scan per badge count before the page rendered a byte - 27 of them. The main agent context runs 8 counts and the admin context none, which is why the client side nav was the only one that felt slow. 24 indexes, shaped (<entity>_client_id, <entity>_archived_at) where the query pairs the two and the client column alone otherwise. The archived column is always trailing and never an index of its own - on a healthy instance nearly every row has it NULL, so it cannot lead. recurring_tickets, services, invoices, recurring_invoices and calendar_events get a single column because their queries carry no archived filter; invoices is in that group because the money total there spans archived rows on purpose. payments.payment_invoice_id and transfers.transfer_revenue_id are join keys rather than client scoping but sit on the same page's critical path. Migration checks information_schema.STATISTICS before each ALTER, since MySQL has no ADD INDEX IF NOT EXISTS and re-adding is an error - safe to re-run and safe where an index was added by hand. db.sql carries the same keys so fresh installs skip the update step. Wider than the side nav: these are the columns clientScopeSql() filters on, so every client-scoped list page was paying for their absence. Expect the ALTERs to be the slow part of the upgrade on a mature instance.
This commit is contained in:
70
db.sql
70
db.sql
@@ -329,7 +329,8 @@ CREATE TABLE `assets` (
|
||||
`asset_location_id` int(11) NOT NULL DEFAULT 0,
|
||||
`asset_contact_id` int(11) NOT NULL DEFAULT 0,
|
||||
`asset_client_id` int(11) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`asset_id`)
|
||||
PRIMARY KEY (`asset_id`),
|
||||
KEY `asset_client_id` (`asset_client_id`,`asset_archived_at`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
@@ -461,6 +462,7 @@ CREATE TABLE `calendar_events` (
|
||||
`event_calendar_id` int(11) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`event_id`),
|
||||
KEY `event_calendar_id` (`event_calendar_id`),
|
||||
KEY `event_client_id` (`event_client_id`),
|
||||
CONSTRAINT `calendar_events_ibfk_1` FOREIGN KEY (`event_calendar_id`) REFERENCES `calendars` (`calendar_id`) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
@@ -574,7 +576,8 @@ CREATE TABLE `certificates` (
|
||||
`certificate_accessed_at` datetime DEFAULT NULL,
|
||||
`certificate_domain_id` int(11) NOT NULL DEFAULT 0,
|
||||
`certificate_client_id` int(11) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`certificate_id`)
|
||||
PRIMARY KEY (`certificate_id`),
|
||||
KEY `certificate_client_id` (`certificate_client_id`,`certificate_archived_at`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
@@ -859,7 +862,8 @@ CREATE TABLE `contacts` (
|
||||
`contact_user_id` int(11) NOT NULL DEFAULT 0,
|
||||
`contact_department` varchar(200) DEFAULT NULL,
|
||||
`contact_client_id` int(11) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`contact_id`)
|
||||
PRIMARY KEY (`contact_id`),
|
||||
KEY `contact_client_id` (`contact_client_id`,`contact_archived_at`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
@@ -985,7 +989,8 @@ CREATE TABLE `credentials` (
|
||||
`credential_contact_id` int(11) NOT NULL DEFAULT 0,
|
||||
`credential_asset_id` int(11) NOT NULL DEFAULT 0,
|
||||
`credential_client_id` int(11) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`credential_id`)
|
||||
PRIMARY KEY (`credential_id`),
|
||||
KEY `credential_client_id` (`credential_client_id`,`credential_archived_at`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
@@ -1197,6 +1202,7 @@ CREATE TABLE `documents` (
|
||||
`document_updated_by` int(11) NOT NULL DEFAULT 0,
|
||||
`document_client_id` int(11) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`document_id`),
|
||||
KEY `document_client_id` (`document_client_id`,`document_archived_at`),
|
||||
FULLTEXT KEY `document_content_raw` (`document_content_raw`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
@@ -1249,7 +1255,8 @@ CREATE TABLE `domains` (
|
||||
`domain_dnshost` int(11) NOT NULL DEFAULT 0,
|
||||
`domain_mailhost` int(11) NOT NULL DEFAULT 0,
|
||||
`domain_client_id` int(11) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`domain_id`)
|
||||
PRIMARY KEY (`domain_id`),
|
||||
KEY `domain_client_id` (`domain_client_id`,`domain_archived_at`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
@@ -1329,7 +1336,8 @@ CREATE TABLE `files` (
|
||||
`file_created_by` int(11) NOT NULL DEFAULT 0,
|
||||
`file_folder_id` int(11) NOT NULL DEFAULT 0,
|
||||
`file_client_id` int(11) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`file_id`)
|
||||
PRIMARY KEY (`file_id`),
|
||||
KEY `file_client_id` (`file_client_id`,`file_archived_at`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
@@ -1423,7 +1431,8 @@ CREATE TABLE `invoices` (
|
||||
`invoice_category_id` int(11) NOT NULL,
|
||||
`invoice_recurring_invoice_id` int(11) NOT NULL DEFAULT 0,
|
||||
`invoice_client_id` int(11) NOT NULL,
|
||||
PRIMARY KEY (`invoice_id`)
|
||||
PRIMARY KEY (`invoice_id`),
|
||||
KEY `invoice_client_id` (`invoice_client_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
@@ -1476,7 +1485,8 @@ CREATE TABLE `locations` (
|
||||
`location_accessed_at` datetime DEFAULT NULL,
|
||||
`location_contact_id` int(11) NOT NULL DEFAULT 0,
|
||||
`location_client_id` int(11) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`location_id`)
|
||||
PRIMARY KEY (`location_id`),
|
||||
KEY `location_client_id` (`location_client_id`,`location_archived_at`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
@@ -1565,7 +1575,8 @@ CREATE TABLE `networks` (
|
||||
`network_accessed_at` datetime DEFAULT NULL,
|
||||
`network_location_id` int(11) NOT NULL DEFAULT 0,
|
||||
`network_client_id` int(11) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`network_id`)
|
||||
PRIMARY KEY (`network_id`),
|
||||
KEY `network_client_id` (`network_client_id`,`network_archived_at`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
@@ -1651,7 +1662,8 @@ CREATE TABLE `payments` (
|
||||
`payment_archived_at` datetime DEFAULT NULL,
|
||||
`payment_account_id` int(11) NOT NULL,
|
||||
`payment_invoice_id` int(11) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`payment_id`)
|
||||
PRIMARY KEY (`payment_id`),
|
||||
KEY `payment_invoice_id` (`payment_invoice_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
@@ -1752,7 +1764,8 @@ CREATE TABLE `projects` (
|
||||
`project_completed_at` datetime DEFAULT NULL,
|
||||
`project_archived_at` datetime DEFAULT NULL,
|
||||
`project_client_id` int(11) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`project_id`)
|
||||
PRIMARY KEY (`project_id`),
|
||||
KEY `project_client_id` (`project_client_id`,`project_archived_at`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
@@ -1825,7 +1838,8 @@ CREATE TABLE `quotes` (
|
||||
`quote_archived_at` datetime DEFAULT NULL,
|
||||
`quote_category_id` int(11) NOT NULL,
|
||||
`quote_client_id` int(11) NOT NULL,
|
||||
PRIMARY KEY (`quote_id`)
|
||||
PRIMARY KEY (`quote_id`),
|
||||
KEY `quote_client_id` (`quote_client_id`,`quote_archived_at`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
@@ -1876,7 +1890,8 @@ CREATE TABLE `racks` (
|
||||
`rack_archived_at` datetime DEFAULT NULL,
|
||||
`rack_location_id` int(11) DEFAULT NULL,
|
||||
`rack_client_id` int(11) NOT NULL,
|
||||
PRIMARY KEY (`rack_id`)
|
||||
PRIMARY KEY (`rack_id`),
|
||||
KEY `rack_client_id` (`rack_client_id`,`rack_archived_at`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
@@ -1985,7 +2000,8 @@ CREATE TABLE `recurring_invoices` (
|
||||
`recurring_invoice_archived_at` datetime DEFAULT NULL,
|
||||
`recurring_invoice_category_id` int(11) NOT NULL,
|
||||
`recurring_invoice_client_id` int(11) NOT NULL,
|
||||
PRIMARY KEY (`recurring_invoice_id`)
|
||||
PRIMARY KEY (`recurring_invoice_id`),
|
||||
KEY `recurring_invoice_client_id` (`recurring_invoice_client_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
@@ -2074,7 +2090,8 @@ CREATE TABLE `recurring_tickets` (
|
||||
`recurring_ticket_contact_id` int(11) NOT NULL DEFAULT 0,
|
||||
`recurring_ticket_asset_id` int(11) NOT NULL DEFAULT 0,
|
||||
`recurring_ticket_ticket_template_id` int(11) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`recurring_ticket_id`)
|
||||
PRIMARY KEY (`recurring_ticket_id`),
|
||||
KEY `recurring_ticket_client_id` (`recurring_ticket_client_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
@@ -2115,7 +2132,8 @@ CREATE TABLE `revenues` (
|
||||
`revenue_category_id` int(11) NOT NULL DEFAULT 0,
|
||||
`revenue_account_id` int(11) NOT NULL,
|
||||
`revenue_client_id` int(11) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`revenue_id`)
|
||||
PRIMARY KEY (`revenue_id`),
|
||||
KEY `revenue_client_id` (`revenue_client_id`,`revenue_archived_at`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
@@ -2257,7 +2275,8 @@ CREATE TABLE `services` (
|
||||
`service_accessed_at` datetime DEFAULT NULL,
|
||||
`service_review_due` date DEFAULT NULL,
|
||||
`service_client_id` int(11) NOT NULL,
|
||||
PRIMARY KEY (`service_id`)
|
||||
PRIMARY KEY (`service_id`),
|
||||
KEY `service_client_id` (`service_client_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
@@ -2480,7 +2499,8 @@ CREATE TABLE `software` (
|
||||
`software_accessed_at` datetime DEFAULT NULL,
|
||||
`software_vendor_id` int(11) DEFAULT 0,
|
||||
`software_client_id` int(11) NOT NULL,
|
||||
PRIMARY KEY (`software_id`)
|
||||
PRIMARY KEY (`software_id`),
|
||||
KEY `software_client_id` (`software_client_id`,`software_archived_at`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
@@ -2942,7 +2962,8 @@ CREATE TABLE `tickets` (
|
||||
`ticket_order` int(11) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`ticket_id`),
|
||||
KEY `ticket_response_due_at` (`ticket_response_due_at`),
|
||||
KEY `ticket_resolution_due_at` (`ticket_resolution_due_at`)
|
||||
KEY `ticket_resolution_due_at` (`ticket_resolution_due_at`),
|
||||
KEY `ticket_client_id` (`ticket_client_id`,`ticket_archived_at`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
@@ -2962,7 +2983,8 @@ CREATE TABLE `transfers` (
|
||||
`transfer_archived_at` datetime DEFAULT NULL,
|
||||
`transfer_expense_id` int(11) NOT NULL,
|
||||
`transfer_revenue_id` int(11) NOT NULL,
|
||||
PRIMARY KEY (`transfer_id`)
|
||||
PRIMARY KEY (`transfer_id`),
|
||||
KEY `transfer_revenue_id` (`transfer_revenue_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
@@ -2988,7 +3010,8 @@ CREATE TABLE `trips` (
|
||||
`trip_archived_at` datetime DEFAULT NULL,
|
||||
`trip_user_id` int(11) NOT NULL DEFAULT 0,
|
||||
`trip_client_id` int(11) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`trip_id`)
|
||||
PRIMARY KEY (`trip_id`),
|
||||
KEY `trip_client_id` (`trip_client_id`,`trip_archived_at`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
@@ -3200,7 +3223,8 @@ CREATE TABLE `vendors` (
|
||||
`vendor_accessed_at` datetime DEFAULT NULL,
|
||||
`vendor_client_id` int(11) NOT NULL DEFAULT 0,
|
||||
`vendor_template_id` int(11) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`vendor_id`)
|
||||
PRIMARY KEY (`vendor_id`),
|
||||
KEY `vendor_client_id` (`vendor_client_id`,`vendor_archived_at`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
||||
@@ -3213,4 +3237,4 @@ CREATE TABLE `vendors` (
|
||||
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||
|
||||
-- Dump completed on 2026-08-27 17:57:04
|
||||
-- Dump completed on 2026-08-27 22:58:59
|
||||
|
||||
Reference in New Issue
Block a user