ВСКРЫТИЕ ПОКАЗАЛО, ЧТО ПРИЧИНОЙ СМЕРТИ СТАЛО ВСКРЫТИЕ

MYSQL. Золотой фонд запросов.

2018.10.15 12:24

1. Как найти первый незанятый идентификатор:

SELECT (mytable.id+1) as new_id FROM mytable WHERE (SELECT 1 FROM mytable as st WHERE st.id=(mytable.id+1)) IS NULL ORDER BY mytable.id LIMIT 1

то же, но начиная с 1000:

SELECT (mytable.id+1) as new_id FROM mytable WHERE mytable.id>1000 AND (SELECT 1 FROM mytable as st WHERE st.id=(mytable.id+1)) IS NULL ORDER BY mytable.id LIMIT 1

2. Не помню для чего:

(SELECT * ORDER BY `f1` DESC LIMIT 15) ORDER BY `f2` DESC;

3. Как найти количество подстрок в строке:

SELECT (LENGTH(строка) - LENGTH(REPLACE(строка, подстрока, ''))) / LENGTH(подстрока) FROM ...

4. Пропустить определенные таблицы в mysqldump:

mysqldump -h <host> -u <username> -p <schema> --no-data > db-structure.sql

mysqldump -h <host> -u <username> -p <schema> --no-create-info --ignore-table=schema.table1 --ignore-table=schema.table2 > db-data.sql

5. Как выбрать с LEFT JOIN только одну запись?

Правильный ответ - не использовать LEFT JOIN. Выигрыш во времени на 1-2 порядка.

SELECT u.*, (SELECT video_id FROM video_stats v where u.member_id=v.member_id limit 1) as video_id FROM users u;

6. Максимальный возможный размер памяти, используемый СУБД

SELECT @@key_buffer_size,
@@query_cache_size,
@@innodb_buffer_pool_size,
@@innodb_log_buffer_size,
@@max_allowed_packet,
@@max_connections,
@@read_buffer_size,
@@read_rnd_buffer_size,
@@sort_buffer_size,
@@join_buffer_size,
@@binlog_cache_size,
@@net_buffer_length,
@@thread_stack,
@@tmp_table_size,

( @@key_buffer_size
+ @@query_cache_size
+ @@innodb_buffer_pool_size
+ @@innodb_log_buffer_size
+ @@max_allowed_packet
+ @@max_connections * (
@@read_buffer_size
+ @@read_rnd_buffer_size
+ @@sort_buffer_size
+ @@join_buffer_size
+ @@binlog_cache_size
+ @@net_buffer_length * 2
+ @@thread_stack
+ @@tmp_table_size )
) / (1024 * 1024 * 1024) AS MAX_MEMORY_GB



КОММЕНТАРИИ

Введите код с картинки: