Czy zapytanie bazy danych jest szybsze, jeśli wstawię wiele wierszy jednocześnie:
lubić
INSERT....
UNION
INSERT....
UNION
(Muszę wstawić jak 2-3000 wierszy)
Czy zapytanie bazy danych jest szybsze, jeśli wstawię wiele wierszy jednocześnie:
lubić
INSERT....
UNION
INSERT....
UNION
(Muszę wstawić jak 2-3000 wierszy)
Odpowiedzi:
INSERT
instrukcje korzystające zeVALUES
składni mogą wstawiać wiele wierszy. Aby to zrobić, dołącz wiele list wartości kolumn, każda zamknięta w nawiasach i oddzielona przecinkami.
Przykład:
INSERT INTO tbl_name
(a,b,c)
VALUES
(1,2,3),
(4,5,6),
(7,8,9);
INSERT INTO Table SELECT 1, '14/05/2012', 3 UNION SELECT 2, '05/14/2012', 3
. oczywiście będzie to lepsze, ponieważ wstawione wartości pochodzą z różnych tabel.
Jeśli masz swoje dane w pliku tekstowym, możesz użyć LOAD DATA INFILE .
Podczas ładowania tabeli z pliku tekstowego użyj LOAD DATA INFILE. Zazwyczaj jest to 20 razy szybciej niż przy użyciu instrukcji INSERT.
Optymalizacja instrukcji INSERT
Więcej wskazówek dotyczących przyspieszenia instrukcji wstawiania można znaleźć pod powyższym linkiem.
BEGIN;
INSERT INTO test_b (price_sum)
SELECT price
FROM test_a;
INSERT INTO test_c (price_summ)
SELECT price
FROM test_a;
COMMIT;
Oto rozwiązanie PHP gotowe do użycia z tabelą: m (relacja wiele do wielu):
// get data
$table_1 = get_table_1_rows();
$table_2_fk_id = 123;
// prepare first part of the query (before values)
$query = "INSERT INTO `table` (
`table_1_fk_id`,
`table_2_fk_id`,
`insert_date`
) VALUES ";
//loop the table 1 to get all foreign keys and put it in array
foreach($table_1 as $row) {
$query_values[] = "(".$row["table_1_pk_id"].", $table_2_fk_id, NOW())";
}
// Implode the query values array with a coma and execute the query.
$db->query($query . implode(',',$query_values));
// db table name / blog_post / menu / site_title
// Insert into Table (column names separated with comma)
$sql = "INSERT INTO product_cate (site_title, sub_title)
VALUES ('$site_title', '$sub_title')";
// db table name / blog_post / menu / site_title
// Insert into Table (column names separated with comma)
$sql = "INSERT INTO menu (menu_title, sub_menu)
VALUES ('$menu_title', '$sub_menu', )";
// db table name / blog_post / menu / site_title
// Insert into Table (column names separated with comma)
$sql = "INSERT INTO blog_post (post_title, post_des, post_img)
VALUES ('$post_title ', '$post_des', '$post_img')";