Mailinglisten-Archive |
Hallo,
eine Anwendung protokolliert in einer Tabelle die letzen Änderungen.
Wenn nun Daten gelöscht werden, sind diese letzten Änderungen von dem
Wert überflüssig und werden gelöscht.
mysql> status;
--------------
mysql Ver 14.7 Distrib 4.1.22, for unknown-linux-gnu (x86_64) using
readline 4.3
Die Datenbank ist eine InnoDB Datenbank. Die Tabelle hat folgende Parameter:
/*Column Information For - accessinfo*/
------------------------------------------------------
Field Type Collation Null Key
Default Extra Privileges Comment
------------------- ------------ ----------------- ------ ------
------- ------ ------------------------------- -------
acc_id varchar(36) latin1_swedish_ci PRI
select,insert,update,references
table_name varchar(50) latin1_swedish_ci YES
(NULL) select,insert,update,references
primary_key varchar(200) latin1_swedish_ci YES
(NULL) select,insert,update,references
modification_time datetime NULL YES
(NULL) select,insert,update,references
is_created_flag tinyint(1) NULL
0 select,insert,update,references
modification_usr_id varchar(36) latin1_swedish_ci YES MUL
(NULL) select,insert,update,references
/*Index Information For - accessinfo*/
-----------------------------------------------------
Table Non_unique Key_name Seq_in_index Column_name
Collation Cardinality Sub_part Packed Null Index_type
Comment
---------- ---------- ------------------- ------------
------------------- --------- ----------- -------- ------ ------
---------- -------
accessinfo 0 PRIMARY 1 acc_id
A 1540156 (NULL) (NULL) BTREE
accessinfo 1 modification_usr_id 1
modification_usr_id A 18 (NULL) (NULL) YES
BTREE
/*DDL Information For - accessinfo*/
---------------------------------------------------
Table Create Table
---------- ---------------------------------------------------------------------------------------------------
accessinfo CREATE TABLE `accessinfo` (
`acc_id` varchar(36) NOT NULL default '',
`table_name` varchar(50) default NULL,
`primary_key` varchar(200) default NULL,
`modification_time` datetime default NULL,
`is_created_flag` tinyint(1) NOT NULL default '0',
`modification_usr_id` varchar(36) default NULL,
PRIMARY KEY (`acc_id`),
KEY `modification_usr_id` (`modification_usr_id`),
CONSTRAINT `accessinfo_ibfk_1` FOREIGN KEY
(`modification_usr_id`) REFERENCES `user` (`usr_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Im Moment hat sie folgende Menge Einträge:
mysql> select count(*) from accessinfo;
+----------+
| count(*) |
+----------+
| 1528306 |
+----------+
1 row in set (2.19 sec)
Beim Löschen tritt jetzt folgendes Problem auf, hier das slow-query-log:
# Time: 080903 12:55:29
# Query_time: 8 Lock_time: 0 Rows_sent: 0 Rows_examined: 0
DELETE from accessinfo
WHERE table_name = 'abc_dfg'
AND primary_key =
'0E3BA1ED-07FA-B5F3-99335307CBDC88A9~5C2DDE72-955A-8726-A7D38B263A9B9151';
Nach meinem Verständnis kann man den lesenden Zugriff über Indexes
verbessern, aber beim manipulieren von Einträgen müsste der Index
bremsen.
Hat jemand eine Idee wie man das Löschen beschleunigen kann?
Würde ein Autocommit oder ein Zurückhalten auf mehrere Änderung Sinn machen?
Vielen Dank und liebe Grüße,
Michael 'da didi' Diederich
--
http://de.wikipedia.org/wiki/Benutzer:MichaelDiederich
http://www.md-d.org/
php::bar PHP Wiki - Listenarchive