Медленный запрос на обновление / удаление операторов SQL - PullRequest
0 голосов
/ 07 июля 2010

В mysql много медленных запросов, связанных только с операторами update и delete. Таблицы имеют 2 индексных столбца и не сильно индексированные таблицы. Каждая таблица имеет в среднем 30 тыс. Записей.

Пожалуйста, дайте ваши предложения о том, как преодолеть медленные запросы, связанные с обновлением и удалением запросов. Эти виды запросов:

DELETE FROM <table2> 
 WHERE ID IN (SELECT ID 
                FROM <table1> WHERE ID2=100); 

... или:

UPDATE <table1> 
   SET <colmunname>=0 
 WHERE id=1001; 

Ответы [ 4 ]

2 голосов
/ 07 июля 2010

Поскольку таблицы индексируются, мое первое предложение - обновить статистику для таблиц, используя ANALYZE TABLE :

ANALYZE TABLE table1, table2

Но будьте осторожны:

Во время анализа таблица заблокирована блокировкой чтения для MyISAM, BDB и InnoDB.

1 голос
/ 07 июля 2010

Тот факт, что ваша проблема существует только при обновлении и удалении, говорит мне о том, что вы, вероятно, слишком много индексируете.

Индексы значительно сократят время, затрачиваемое на определенные запросы, но потребуют дополнительной работы при вставке, обновлении и удалении записей из ваших таблиц.Попробуйте исключить индексы для столбцов, которые часто обновляются, особенно если они не часто появляются в предложении where в ваших запросах SQL.

0 голосов
/ 07 июля 2010

Управление индексами и связями с внешним ключом приводит к накладным расходам во время операций обновления и удаления. Я бы восстановил копию вашей prod db на сервере разработки, отбросил все ограничения внешнего ключа и все ожидал, что ваши индексы первичного ключа и увидят разницу в производительности. Затем вы можете добавлять свои индексы обратно, пока не достигнете лучшего баланса производительности для своего приложения.

0 голосов
/ 07 июля 2010

Прежде всего: используйте хранимые процедуры .

Далее: Если ваша БД имеет оптимизирующие возможности -> используйте их.

Наконец: рассмотрите возможность использования нереляционных БД, таких как CouchDB или Cassandra ;

...