SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 28.03.2010 17:08:33

FiMko
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 18.09.2009
Сообщений: 198

Как применить explain к хранимым функциям?

Всем доброго дня!

Есть вопрос, допустим имеется хранимая функция:


DROP FUNCTION IF EXISTS func;
DELIMITER |
CREATE FUNCTION func(arg INT)
RETURNS INT DETERMINISTIC
BEGIN
    select smth from test_table where id = arg limit 1;
END|
DELIMITER ;
 
Если я использую explain для select func(1), то получу:

+----+-------------+-------+------+---------------+------+---------+------+------+----------------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra          |
+----+-------------+-------+------+---------------+------+---------+------+------+----------------+
|  1 | SIMPLE      | NULL  | NULL | NULL          | NULL | NULL    | NULL | NULL | No tables used |
+----+-------------+-------+------+---------------+------+---------+------+------+----------------+
 
Означает ли это, что хранимые функции - исключительно production вещь, использовать их при разработке неправильно,  т.к. банально нельзя выполнить анализ запроса?

Неактивен

 

#2 28.03.2010 17:14:23

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Как применить explain к хранимым функциям?

EXPLAIN используется для отладки одного запроса, а для целой процедуры или функции неприменим. Если хотите отлаживать процедуры, посмотрите на mysqldubugger, в beta-тестировании которого можно принять участие: http://sqlinfo.ru/forum/viewtopic.php?id=2202

Неактивен

 

#3 28.03.2010 17:32:55

FiMko
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 18.09.2009
Сообщений: 198

Re: Как применить explain к хранимым функциям?

rgbeast написал:

EXPLAIN используется для отладки одного запроса, а для целой процедуры или функции неприменим. Если хотите отлаживать процедуры, посмотрите на mysqldubugger, в beta-тестировании которого можно принять участие: http://sqlinfo.ru/forum/viewtopic.php?id=2202

Спасибо за ответ и ссылку на интересную программу!
Еще небольшой вопрос - для одного запроса внутри хранимой функции индексы будут использоваться именно в том же виде, как если бы я решил проверить именно этот конкретный запрос с помощью explain?

Неактивен

 

#4 28.03.2010 17:38:04

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Как применить explain к хранимым функциям?

Запрос выполняется одинаково, независимо от того, откуда вызван. Если у Вас сложные процедуры или триггеры и Вы не можете вручную воссоздать запросы, включите general query log (опция log=filename в my.cnf), в него попадут все исполненные запросы.

Неактивен

 

#5 28.03.2010 17:41:33

FiMko
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 18.09.2009
Сообщений: 198

Re: Как применить explain к хранимым функциям?

rgbeast написал:

Запрос выполняется одинаково, независимо от того, откуда вызван. Если у Вас сложные процедуры или триггеры и Вы не можете вручную воссоздать запросы, включите general query log (опция log=filename в my.cnf), в него попадут все исполненные запросы.

Очень познавательно, спасибо еще раз!
---
Ребята, вы втроем (rgbeast, paulus и vasya) делаете просто неоценимую работу так активно помогая в познании MySQL! Желаю этому форуму дальнейшего успешного развития! (но я не прощаюсь, как это может выглядеть big_smile)

Неактивен

 

#6 28.03.2010 17:59:38

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Как применить explain к хранимым функциям?

FiMko, спасибо на добром слове! Оставайтесь с нами. Но все-таки про general query log я Вас обманул, запросы из процедур в него не попадают.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson