|
Помогите ускорить работу базы
|
|||
---|---|---|---|
#18+
Всем привет. Помогите, пожалуйста, ускорить работу mysql. Что есть. Сайт о погоде, где используется база городов geonames.org - вот с ней и основные косяки. Сервер достаточный 2 x Xeon E5620 2.40 ГГц, 64 ГБ DDR3, посещения маленькие В таблице городов geoname: 3,296,360 записей, 1.3 Гиб, MyISAM, utf8_general_ci авторCREATE TABLE `geoname` ( `geonameid` int NOT NULL, `name` varchar(200) DEFAULT NULL, `asciiname` varchar(200) DEFAULT NULL, `alternatenames` varchar(4000) DEFAULT NULL, `name_ru` varchar(200) NOT NULL, `name_de` varchar(250) NOT NULL, `name_fi` varchar(250) NOT NULL, `status` int NOT NULL DEFAULT '0', `latitude` decimal(10,7) DEFAULT NULL, `longitude` decimal(10,7) DEFAULT NULL, `fclass` char(1) DEFAULT NULL, `fcode` varchar(10) DEFAULT NULL, `country` varchar(2) DEFAULT NULL, `cc2` varchar(60) DEFAULT NULL, `admin1` varchar(20) DEFAULT NULL, `admin2` varchar(80) DEFAULT NULL, `admin3` varchar(20) DEFAULT NULL, `admin4` varchar(20) DEFAULT NULL, `population` int DEFAULT NULL, `elevation` int DEFAULT NULL, `gtopo30` int DEFAULT NULL, `timezone` varchar(40) DEFAULT NULL, `moddate` date DEFAULT NULL, `url_yr` varchar(250) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -- Индексы сохранённых таблиц -- -- -- Индексы таблицы `geoname` -- ALTER TABLE `geoname` ADD PRIMARY KEY (`geonameid`), ADD KEY `name` (`name`), ADD KEY `asciiname` (`asciiname`), ADD KEY `country` (`country`), ADD KEY `fclass` (`fclass`), ADD KEY `fcode` (`fcode`), ADD KEY `admin1` (`admin1`), ADD KEY `name_ru` (`name_ru`), ADD KEY `alternatenames` (`alternatenames`(333)), ADD KEY `population` (`population`), ADD KEY `latitude` (`latitude`), ADD KEY `longitude` (`longitude`), ADD KEY `status` (`status`); COMMIT; При включеном mysqld_slow_queries вылазят такие данные: Query_time: 16.871267 Lock_time: 0.000093 Rows_sent: 1 Rows_examined: 3250392 SELECT * FROM geoname WHERE (name='Luanda' OR asciiname='Luanda') AND country='AO' ORDER BY population DESC LIMIT 1; # Query_time: 17.273812 Lock_time: 0.000085 Rows_sent: 0 Rows_examined: 3296380 SELECT geonameid FROM geoname WHERE (name LIKE 'St Petersburg' OR asciiname LIKE 'St Petersburg') AND country LIKE 'RU' ORDER BY population DESC LIMIT 1; # Query_time: 1.015236 Lock_time: 0.000072 Rows_sent: 1 Rows_examined: 4590 SELECT count(*) FROM geoname WHERE country='CN' AND admin1='20' AND (name LIKE 'Z%' OR asciiname LIKE 'Z%') AND fclass='P'; # Query_time: 3.073833 Lock_time: 0.000052 Rows_sent: 10000 Rows_examined: 1630000 SELECT asciiname,country,admin1 FROM geoname LIMIT 1620000,10000; # Query_time: 9.534146 Lock_time: 0.000035 Rows_sent: 100 Rows_examined: 1837646 SELECT * FROM geoname WHERE country='NP' ORDER BY population DESC LIMIT 100; ну и много похожих запросов. Что можно сделать? Может не правильно построены запросы? Пишу сайты сам. Знаний по настройке mysql нет, все что нужно по настройкам сервера - прибегаю к услугам знакомого. PHP 7.3.18 , mysql 8.0.20 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2020, 09:59 |
|
Помогите ускорить работу базы
|
|||
---|---|---|---|
#18+
hibinyru, Попробуйте нормализовать таблицу до 3нф. Ну и explain запросов было бы не плохо увидеть. Движок еще MyISAM. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2020, 10:10 |
|
Помогите ускорить работу базы
|
|||
---|---|---|---|
#18+
hibinyru, добавьте индекс Каутри+Name ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2020, 14:54 |
|
Помогите ускорить работу базы
|
|||
---|---|---|---|
#18+
crutchmaster, а чего с MyIsam не так? innoDb лучше в этой версии mysql? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2020, 13:08 |
|
Помогите ускорить работу базы
|
|||
---|---|---|---|
#18+
Alex_Ustinov, спасибо, попробую ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2020, 13:09 |
|
Помогите ускорить работу базы
|
|||
---|---|---|---|
#18+
Однозначно сначала нормализация, потом запросы с нормальной бизнес-логикой, потом уже индексы под них. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2020, 23:03 |
|
|
start [/forum/topic.php?fid=47&fpage=20&tid=1828534]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
2ms |
others: | 272ms |
total: | 403ms |
0 / 0 |