Какой из них быстрее на Check и Skip Insert, если существует на SQL / MySQL - PullRequest
1 голос
/ 24 января 2012

Я прочитал много статей об этом.Я хочу услышать от вас.Моя проблема: таблица: ID (INT, уникальный, автоматическое увеличение), заголовок (varchar), контент (текст), ключевые слова (varchar)

Мой PHP-код всегда вставляет новую запись, но не принимаетдублированная база записей на заголовок или ключевые слова.Таким образом, заголовок или ключевое слово не может быть основным полем.Мой PHP-код должен проверять существующие и вставлять 10-20 записей одновременно.

Итак, я проверяю так:

SELECT * FROM TABLE WHERE TITLE=XXX   

И если ничего не вернуть, то я делаю INSERT.Я прочитал какой-то другой пост.И один парень говорит:

INSERT IGNORE INTO Table values()

Другой парень предлагает:

SELECT COUNT(ID) FROM TABLE

Если он вернет 0, тогда введите INSERT

Я не знаю, какой из них быстреемежду этими запросами.

И у меня есть еще 1 вопрос, что отличается и быстрее в этих запросах:

SELECT COUNT(ID) FROM ..
SELECT COUNT(0) FROM ...
SELECT COUNT(1) FROM ...
SELECT COUNT(*) FROM ...

Все они показывают мне общее количество записей в таблице, но я нене знаю, MySQL считает, номер 0 или 1 это мое поле идентификатора?Даже когда я делаю SELECT COUNT (1000), я все равно получаю общее количество записей своей таблицы, в то время как моя таблица имеет только 4 столбца.

Я использую MySQL Workbench, есть ли какие-либо опции для скорости тестирования в этом приложении?

Ответы [ 2 ]

1 голос
/ 24 января 2012

Я бы использовал вставка при обновлении дубликата ключа .В одном важном комментарии к документам говорится: «... если в таблице есть один уникальный индекс из нескольких столбцов, то обновление использует (кажется, использует) все столбцы (уникального индекса) в запросе обновления».

Таким образом, если в таблице приведено ограничение UNIQUE (Title, Keywords), то вы должны использовать:

INSERT INTO table (Title,Content,Keywords) VALUES ('blah_title','blah_content','blah_keywords')
  ON DUPLICATE KEY UPDATE Content='blah_content';

, это должно сработать, и это один запрос кбазы данных.

0 голосов
/ 24 января 2012

SELECT COUNT(*) FROM .... быстрее SELECT COUNT(ID) FROM .. или создайте что-то вроде этого:

INSERT INTO table (a,b,c) VALUES (1,2,3)
     ON DUPLICATE KEY UPDATE c=3;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...