Moin!
Ich habe leider ein arges Problem was die Performance einer Datenbankstruktur angeht und hoffe das mir hier jemand weiterhelfen bzw. einen Tipp geben kann.
Folgende Struktur:
CREATE TABLE `products_categories` (
`products_id` bigint(255) NOT NULL default '0',
`categories_id` int(11) NOT NULL default '0',
`categories_sub_id` int(11) NOT NULL default '0',
`categories_sub_books_id` int(11) NOT NULL default '0',
PRIMARY KEY (`products_id`),
KEY `categories_id` (`categories_id`),
KEY `categories_sub_id` (`categories_sub_id`),
KEY `categories_sub_books_id` (`categories_sub_books_id`)
) TYPE=MyISAM;
CREATE TABLE `products_data` (
`id` bigint(255) NOT NULL auto_increment,
`products_isbn` varchar(50) NOT NULL default '',
`products_ean` varchar(50) NOT NULL default '',
`products_name` varchar(255) NOT NULL default '',
`products_system` varchar(100) NOT NULL default '',
`products_datentraeger` varchar(100) NOT NULL default '',
`products_uvp` varchar(20) NOT NULL default '',
`products_hersteller` text NOT NULL,
`products_vertrieb` varchar(100) NOT NULL default '',
`products_beschreibung` text NOT NULL,
`products_schauspieler` varchar(255) NOT NULL default '',
`products_regie` varchar(255) NOT NULL default '',
`products_produktion` varchar(100) NOT NULL default '',
`products_spiellaenge` varchar(30) NOT NULL default '',
`products_fsk` varchar(30) NOT NULL default '',
`products_land` varchar(50) NOT NULL default '',
`products_jahr` varchar(20) NOT NULL default '',
`products_sprache` varchar(50) NOT NULL default '',
`products_ton` varchar(255) NOT NULL default '',
`products_untertitel` varchar(255) NOT NULL default '',
`products_bildformat` varchar(100) NOT NULL default '',
`products_extras` text NOT NULL,
`products_erscheinung` int(15) NOT NULL default '0',
`products_image` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1117230 ;
CREATE TABLE `products_stats` (
`products_id` bigint(255) NOT NULL default '0',
`sales_last` int(11) NOT NULL default '0',
`sales` int(11) NOT NULL default '0',
`views_last` int(10) NOT NULL default '0',
`views` int(10) NOT NULL default '0',
PRIMARY KEY (`products_id`),
KEY `test` (`products_id`,`sales_last`)
) TYPE=MyISAM;
Die Abfrage sieht so aus:
SELECT
a.id, a.products_ean, a.products_name, a.products_system, a.products_uvp, a.products_hersteller, a.products_schauspieler,
a.products_jahr, a.products_image,
b.sales_last,
c.categories_id, c.categories_sub_id, c.categories_sub_books_id
FROM
products_data a
JOIN products_stats b ON (a.id = b.products_id)
JOIN products_categories c ON (b.products_id = c.products_id && categories_id = 21)
LIMIT 0, 25
Das Funktioniert; jedoch nicht so wie ich mir das vorstelle.
Die Tabelle products_stats ist nach sales_last vorsortiert. Ich möchte also gerne die kompletten Ergebnisse ohne ein ORDER BY sortiert ausgeben. Funktioniert nur leider nicht Mit dem ORDER BY dauert die ganze Abfrage gut 1.4 Sekunden. Das dauert zu lange.
Hat jemand Ideen; falsche Datenbankstruktur gewählt?
Grüße
Stefan
Ich habe leider ein arges Problem was die Performance einer Datenbankstruktur angeht und hoffe das mir hier jemand weiterhelfen bzw. einen Tipp geben kann.
Folgende Struktur:
CREATE TABLE `products_categories` (
`products_id` bigint(255) NOT NULL default '0',
`categories_id` int(11) NOT NULL default '0',
`categories_sub_id` int(11) NOT NULL default '0',
`categories_sub_books_id` int(11) NOT NULL default '0',
PRIMARY KEY (`products_id`),
KEY `categories_id` (`categories_id`),
KEY `categories_sub_id` (`categories_sub_id`),
KEY `categories_sub_books_id` (`categories_sub_books_id`)
) TYPE=MyISAM;
CREATE TABLE `products_data` (
`id` bigint(255) NOT NULL auto_increment,
`products_isbn` varchar(50) NOT NULL default '',
`products_ean` varchar(50) NOT NULL default '',
`products_name` varchar(255) NOT NULL default '',
`products_system` varchar(100) NOT NULL default '',
`products_datentraeger` varchar(100) NOT NULL default '',
`products_uvp` varchar(20) NOT NULL default '',
`products_hersteller` text NOT NULL,
`products_vertrieb` varchar(100) NOT NULL default '',
`products_beschreibung` text NOT NULL,
`products_schauspieler` varchar(255) NOT NULL default '',
`products_regie` varchar(255) NOT NULL default '',
`products_produktion` varchar(100) NOT NULL default '',
`products_spiellaenge` varchar(30) NOT NULL default '',
`products_fsk` varchar(30) NOT NULL default '',
`products_land` varchar(50) NOT NULL default '',
`products_jahr` varchar(20) NOT NULL default '',
`products_sprache` varchar(50) NOT NULL default '',
`products_ton` varchar(255) NOT NULL default '',
`products_untertitel` varchar(255) NOT NULL default '',
`products_bildformat` varchar(100) NOT NULL default '',
`products_extras` text NOT NULL,
`products_erscheinung` int(15) NOT NULL default '0',
`products_image` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1117230 ;
CREATE TABLE `products_stats` (
`products_id` bigint(255) NOT NULL default '0',
`sales_last` int(11) NOT NULL default '0',
`sales` int(11) NOT NULL default '0',
`views_last` int(10) NOT NULL default '0',
`views` int(10) NOT NULL default '0',
PRIMARY KEY (`products_id`),
KEY `test` (`products_id`,`sales_last`)
) TYPE=MyISAM;
Die Abfrage sieht so aus:
SELECT
a.id, a.products_ean, a.products_name, a.products_system, a.products_uvp, a.products_hersteller, a.products_schauspieler,
a.products_jahr, a.products_image,
b.sales_last,
c.categories_id, c.categories_sub_id, c.categories_sub_books_id
FROM
products_data a
JOIN products_stats b ON (a.id = b.products_id)
JOIN products_categories c ON (b.products_id = c.products_id && categories_id = 21)
LIMIT 0, 25
Das Funktioniert; jedoch nicht so wie ich mir das vorstelle.
Die Tabelle products_stats ist nach sales_last vorsortiert. Ich möchte also gerne die kompletten Ergebnisse ohne ein ORDER BY sortiert ausgeben. Funktioniert nur leider nicht Mit dem ORDER BY dauert die ganze Abfrage gut 1.4 Sekunden. Das dauert zu lange.
Hat jemand Ideen; falsche Datenbankstruktur gewählt?
Grüße
Stefan
Kommentar