Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL]Optymalizacja Indeksy
Randallmaster
post 11.05.2016, 11:32:14
Post #1





Grupa: Zarejestrowani
Postów: 677
Pomógł: 11
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


Tabela posiada 16 tys rekordów.

Mam zapytanie:
  1. SELECT `d`.`id` AS `id`, (SELECT count(*) FROM `document_packing` `d2` WHERE ((`d2`.`ip` LIKE concat(`d`.`ip`,'.%')) AND (`d2`.`act` = 'Y'))) AS `under` FROM ((`document_packing` `d` )) LIMIT 1000


Zapytanie wykonuje się 5 sec... Co mogę zrobić aby to zoptymalizować?
Jakie indeksy muszę dodać?
Go to the top of the page
+Quote Post
Pyton_000
post 11.05.2016, 11:40:30
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


A coś w ten deseń?
  1. SELECT
  2. `d`.`id`,
  3. COUNT(1)
  4. FROM
  5. `document_packing` `d`
  6. LEFT JOIN `document_packing` `d2` ON (`d2`.`act` = 'Y' AND `d2`.`ip` LIKE CONCAT(`d`.`ip`, '.%'))
  7. GROUP BY `d`.`id`;


I ew. pokaż EXPLAIN ze swojego zapytania.

Ten post edytował Pyton_000 11.05.2016, 11:40:50
Go to the top of the page
+Quote Post
Randallmaster
post 11.05.2016, 11:57:35
Post #3





Grupa: Zarejestrowani
Postów: 677
Pomógł: 11
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


Ciągle to samo sad.gif

id:1
select_type:SIMPLE
table: document_packing
type:ALL
possible_keys:NULL
key:NULL
key_len:NULL
ref:NULL
rows:16188
Extra:NULL




Go to the top of the page
+Quote Post
Pyton_000
post 11.05.2016, 12:05:54
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Pokaż dump ze struktury tabeli
Go to the top of the page
+Quote Post
Randallmaster
post 11.05.2016, 13:23:47
Post #5





Grupa: Zarejestrowani
Postów: 677
Pomógł: 11
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


CREATE TABLE IF NOT EXISTS `document_packing` (
`id` int(11) NOT NULL,
`ip` varchar(65) NOT NULL,
`parent_id` int(11) NOT NULL DEFAULT '0',
`depth` int(11) NOT NULL DEFAULT '1',
`quantity` decimal(10,4) NOT NULL,
`quantity_packing` decimal(10,4) NOT NULL DEFAULT '0.0000',
`act` char(1) NOT NULL DEFAULT 'Y'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `document_packing`
ADD PRIMARY KEY (`id`,`ip`),
ADD UNIQUE KEY `id` (`id`,`ip`) USING BTREE,
ADD KEY `ip` (`ip`),
ADD KEY `test2` (`ip`,`act`),
ADD KEY `id_2` (`id`,`ip`);

Udało mi się w połowie rozwiązać problem. Zapytanie to posiadam w widoku i jeżeli go uruchomię to ładuje się ok 88 sec. Natomiast jeżeli zapytanie skopiuję z widoku i puszczę go bez widoku działa 0,1187, co może być tego przyczyną?

Ten post edytował Randallmaster 11.05.2016, 12:12:34
Go to the top of the page
+Quote Post
Pyton_000
post 11.05.2016, 13:27:28
Post #6





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Olej widoki, MySQL strasznie sobie z nimi radzi.
Go to the top of the page
+Quote Post
Randallmaster
post 11.05.2016, 13:44:42
Post #7





Grupa: Zarejestrowani
Postów: 677
Pomógł: 11
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


aplikacja działa na widokach sad.gif a ja poprawiam dane sad.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.04.2024 - 17:28