Mysql выгрузка дампа без данных
Следующая команда выгрузит дамп базы данных с триггреми, процедурами, таблицами НО! без данных в таблицах.
1 |
mysqldump --routines --no-data --no-create-db --skip-opt billing > onlytriggers.sql |
Жизнь замечательных грибов
Здесь собраны статьи, наработки, исправление ошибок и решение проблем связанных с работой базы данных MySQL
Следующая команда выгрузит дамп базы данных с триггреми, процедурами, таблицами НО! без данных в таблицах.
1 |
mysqldump --routines --no-data --no-create-db --skip-opt billing > onlytriggers.sql |
1) Использование DISTINCT работает быстрее чем group by
Было:
1 |
select requestid from request_posts where requestid in (select id from requests where created_on between '2016-09-01 00:00:00' and '2016-09-30 23:59:59' and classid<>13) and author_id in (5) group by requestid; |
Стало:
1 |
select DISTINCT(requestid) from request_posts where requestid in (select id from requests where created_on between '2016-09-01 00:00:00' and '2016-09-30 23:59:59' and classid<>13) and author_id in (5) |
2) IN в запросах работает медленно. Очень медленно! Лучше вместо IN, использовать JOIN
Было:
1 |
select * from requests where id in (select (requestid) from request_posts where requestid in (select id from requests where created_on between '2016-09-01 00:00:00' and '2016-09-30 23:59:59' and classid<>13) and author_id in (5) ); |
Выполняется 50 секунд
Стало:
1 |
select * from requests inner join (select DISTINCT(requestid) from request_posts where requestid in (select id from requests where created_on between '2016-09-01 00:00:00' and '2016-09-30 23:59:59' and classid<>13) and author_id in (5)) as zx on zx.requestid=requests.id; |
Выполняется 0.23 секуны
Первое число текущего месяца:
1 |
DATE_SUB(now(),INTERVAL DAYOFMONTH(now())-1 DAY) AS 'month_create' |
Первое число следующего месяца:
1 |
date_add(DATE_SUB(now(),INTERVAL DAYOFMONTH(now())-1 DAY),interval 1 month) AS 'month_pay' |
Последний день месяца следующего месяца:
1 |
date_add(date_add(DATE_SUB(now(),INTERVAL DAYOFMONTH(now())-1 DAY),interval 2 month),interval -1 day) AS 'month_free' |
Данная команда позволяет «обьединять» в одну строчку результат запроса. Например:
Было:
1 2 3 4 5 6 |
select devices.device_name,devices.device_id,devices_options.value as ip from devices inner join devices_options on devices_options.device_id=devices.device_id where devices.tpl<>1; | sw-km-19b | 1147 | X-Files | | sw-km-19b | 1147 | 12.8.11.127 | | sw-len-28 | 1148 | f8f08210e96e | | sw-len-28 | 1148 | X-Files | | sw-len-28 | 1148 | 17.8.14.12 | |
Стало:
1 2 3 |
select devices.device_name,devices.device_id,GROUP_CONCAT(devices_options.value SEPARATOR '^') as ip from devices inner join devices_options on devices_options.device_id=devices.device_id where devices.tpl<>1 and (devices_options.name='IP' or devices_options.name='community') group by devices.device_id; | sw-km-19b | 1147 | X-Files^12.8.14.17 | | sw-len-28 | 1148 | X-Files^17.2.14.12 | |
Задача: отсортировать некое текстовое поле, чтобы сортировка шла, как будто в нем находится число, а не текст.
Решение:
1 |
order by cast(address_flat.name as signed) asc |
Функция CAST имеет следующий синтаксис:
CAST(expression AS type)
,где аргумент type представляет один из типов: