phpbar.de logo

Mailinglisten-Archive

[dbs] MySQL: Löschen beschleunigen?

[dbs] MySQL: Löschen beschleunigen?

Michael Diederich michael at md-d.org
Mit Sep 3 12:29:19 CEST 2008


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