jest zapytanie do bazy danych szybciej, jeśli wstawić wiele wierszy naraz:Wstawianie wielu wierszy w mysql
jak
INSERT....
UNION
INSERT....
UNION
(Muszę wstawić jak 2-3000 wierszy)
jest zapytanie do bazy danych szybciej, jeśli wstawić wiele wierszy naraz:Wstawianie wielu wierszy w mysql
jak
INSERT....
UNION
INSERT....
UNION
(Muszę wstawić jak 2-3000 wierszy)
INSERT
instrukcje, które używają składniVALUES
, 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);
Można to zrobić w ten sposób, ale on chce wstawić 3000 wierszy. – RKh
@RPK. Zgadzam się z tobą, ale nie znam jej źródła danych. Jak już napisałem, jeśli ma plik, użyłbym składni danych obciążenia, jak sugeruje cularis. :) –
można również użyć 'INSERT INTO Tabela SELECT 1, '14/05/2012 ', 3 UNION SELECT 2, '05/14/2012', 3'. oczywiście będzie to tylko lepsze z wprowadzonych wartości pochodzących z różnych tabel. –
Jeśli masz swoje dane w pliku tekstowym, można użyć LOAD DATA INFILE.
Podczas ładowania tabeli z pliku tekstowego użyj LOAD DATA INFILE. Zwykle jest to 20 razy szybsze niż przy użyciu instrukcji INSERT.
Można znaleźć więcej wskazówek, jak przyspieszyć instrukcje wstawiania na link powyżej.
Za pomocą tego skryptu można wstawić dowolną liczbę wierszy.
INSERT INTO tableName
(column1,column2,column3,column4)
VALUES
('value1' , 'value2', 'value3','value4'),
('value1' , 'value2', 'value3','value4'),
('value1' , 'value2', 'value3','value4');
Jak to się poprawia po odpowiedzi Nicoli Cossu sprzed pięciu lat? – John
Czy jesteś Nicola Cossu? – lalithkumar
BEGIN;
INSERT INTO test_b (price_sum)
SELECT price
FROM test_a;
INSERT INTO test_c (price_summ)
SELECT price
FROM test_a;
COMMIT;
To zasługuje na więcej upvotes, korzystając z tego można wstawić dane wstawione z innych tabel – Novastorm
// 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')";
Czekaj, .... co? – proofzy
Oto PHP roztwór gotowy do użycia o n M (wiele-do-wielu) Tabela:
// 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));
Użycie metody implode() powoduje obejście problemu "ostatniego znaku", ale powoduje ogromne obciążenie pamięci. Zapytała o 3000 wierszy, wyobraź sobie, że każdy wiersz ma 1kb danych, to już 3MB surowych danych. Tablica zajmie 30MB pamięci, która już zużyje kolejne 30MB z $ table_1, więc skrypt użyje 60MB. Po prostu mówię, w przeciwnym razie jest to dobre rozwiązanie – John
UNION dla wybiera. – Jacob
Jak nadchodzą rzędy? Czy piszesz bezpośrednio SQL na MySQL Query Browser lub używając wewnątrz PHP lub C# lub czegoś innego. Jeśli pasujesz do tego ostatniego przypadku, sprawdź następujące linki: [Najszybsza metoda wstawiania rekordów 100k] (http://codicesoftware.blogspot.com/2008/04/fastest-way-to-insert-100k-registers.html) [Fast Inserts with Multiple Rows] (http://blog.cnizz.com/2010/05/31/optimize-mysql-queries-fast-mutliple-row-inserts/) – RKh