Incredibly long execution time for a update query?
2
votes
1
answer
199
views
I am using MySQL 5.6.
In my table
invoices
I added two datetime columns that I will be setting, based on if another column is a certain value.
UPDATE invoices
SET twoWeekAlert = DATE_ADD(now(), INTERVAL 2 WEEK)
WHERE state = 6;
There are only 205 records that have state =6 and 3,500 total records.
After 5 minutes I canceled the query, made an index on the state column, and tried again. After 10 minutes I canceled that one.
What is going on, is this a known issue with MySQL updating using a datetime calculation function or something? I worry because I know I will have to run similar type updates in the future and I can't have it take that long.
The EXPLAIN
statement I believe is telling me it IS using my index:
selectType table type possible_keys key key_len ref rows extra
SIMPLE invoices range stateIndex stateindex 2 const 205 using where
There were no warnings in my explain statement.
The CREATE
statement of my table
CREATE TABLE invoices
(
idx
int(11) NOT NULL AUTO_INCREMENT,
number
varchar(255) DEFAULT NULL,
name
varchar(255) DEFAULT NULL,
parentSOId
int(11) DEFAULT NULL,
parentProjectId
int(11) DEFAULT NULL,
status
int(1) DEFAULT '1',
active
int(1) DEFAULT '1',
dateEntered
varchar(45) DEFAULT NULL,
dateDue
varchar(45) DEFAULT NULL,
individualId
int(11) DEFAULT '-1',
amount
decimal(11,2) DEFAULT '0.00',
margin
decimal(11,2) DEFAULT '0.00',
comment
varchar(500) DEFAULT '',
custContactId
int(11) DEFAULT '-1',
custBuyerId
int(11) DEFAULT '-1',
taxable
int(11) DEFAULT NULL,
taxAmount
decimal(11,2) DEFAULT NULL,
totalAmount
decimal(11,2) DEFAULT NULL,
paymentTerms
int(11) DEFAULT '-1',
type
int(11) DEFAULT '-1',
shipVia
int(11) DEFAULT '-1',
manTax
int(1) DEFAULT '0',
state
tinyint(4) DEFAULT '0',
sentToContNotNeeded
int(1) DEFAULT '0',
sentToAcctNotNeeded
int(1) DEFAULT '0',
twoWeekAlert
datetime DEFAULT NULL,
threeWeekAlert
datetime DEFAULT NULL,
PRIMARY KEY (idx
),
KEY invoiceNum
(number
),
KEY invoiceName
(name
),
KEY fk-listprojects_idx
(parentProjectId
),
KEY soIdIndex
(parentSOId
),
KEY stateInd
(state
),
CONSTRAINT fk-listprojects
FOREIGN KEY (parentProjectId
) REFERENCES listprojects
(idx
) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=3604 DEFAULT CHARSET=latin1;
Things I've also tried:
Doing it by primary key ie WHERE idx IN (list of ids)
Instead of using datetime, just using date since it is enough for my needs and using DATE_ADD(curDate(), INTERVAL 2 WEEK)
I've tried both ways: NOW()
with a datetime type and curDate()
with a date type. Both had the same issue.
Running it on a much stronger machine. Still the same issue.
Luckily I was just told to not retroactively affect old records so I will only be doing one record at a time, which seemed to work. I am still very curious why this seems to take forever especially when I am the only connection on a dev database.
My server is local, in office, running on a machine in the closet. So, bare metal, not cloud or ESX.
SELECT IFNULL(state,'Total') state_value, COUNT(1) rowcount
FROM invoices
GROUP BY state WITH ROLLUP;
Results:
-1 14
0 3217
2 5
4 54
5 9
6 205
Total 3504
SHOW INDEX ON invoices
results:
Table - invoices
Non_Unique - 1
Key_Name - stateIndex
Seq_in_Index - 1 (Same for all other indexes)
Column_name - state
Collation - A (all other indexes have an A for this)
Cardinality - 12 (All other indexes have a Cardinality of 3476)
Sub_part - Null (Same for all other indexes)
Packed - Null (Same for all other indexes)
Null - YES (Same for all other indexes)
Index_type - BTREE (Same for all other indexes)
Asked by bjk116
(225 rep)
Nov 21, 2019, 02:28 PM
Last activity: Jun 22, 2025, 08:02 AM
Last activity: Jun 22, 2025, 08:02 AM