Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

truy vấn chậm mysql

Thao tác sau khá nhanh, mất hơn 6 phút một chút với 10 triệu hàng nhưng bảng ví dụ có ít trường và chỉ mục hơn bảng sản xuất của bạn, vì vậy, trong trường hợp của bạn có thể mất nhiều thời gian hơn một chút nếu bạn quyết định sử dụng nó!

Lưu ý:ví dụ được thực hiện trên hệ điều hành windows, vì vậy bạn sẽ phải thay đổi tên đường dẫn và \ r \ n thành \ n để phù hợp với các tiêu chuẩn linux!

Đây là bảng hiện có của tôi (công cụ InnoDB):

drop table if exists customers;
create table customers
(
customer_id int unsigned not null auto_increment primary key,
name varchar(255) not null,
country_id tinyint unsigned not null default 0,
key (country_id)
)
engine=innodb;

mysql> select count(*) from customers;
+----------+
| count(*) |
+----------+
| 10000000 |
+----------+
1 row in set (1.78 sec)

Tạo phiên bản mới của bảng bao gồm trường mới mà bạn yêu cầu:

drop table if exists customers_new;
create table customers_new
(
customer_id int unsigned not null auto_increment primary key,
name varchar(255) not null,
country_id tinyint unsigned not null default 0,
split tinyint not null default 0,
key (country_id)
)
engine=innodb;

Tìm vị trí của thư mục Tải lên của bạn:

select @@secure_file_priv;

Xuất dữ liệu theo thứ tự PK từ bảng khách hàng cũ sang định dạng csv:

select * into outfile 'C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\customers.dat'
fields terminated by '|' optionally enclosed by '"'
lines terminated by '\r\n'
from customers order by customer_id;

Query OK, 10000000 rows affected (17.39 sec)

Tải tệp customer.dat vào bảng khách hàng mới:

truncate table customers_new;

set autocommit = 0;

load data infile 'C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\customers.dat'
into table customers_new
fields terminated by '|' optionally enclosed by '"'
lines terminated by '\r\n'
(
customer_id,
name,
country_id,
@dummy -- represents the new split field
)
set
name = nullif(name,'');

commit;

Query OK, 10000000 rows affected (6 min 0.14 sec)

Xác nhận rằng bảng mới trông ổn:

select * from customers_new order by customer_id desc limit 1;
+-------------+-------------------+------------+-------+
| customer_id | name              | country_id | split |
+-------------+-------------------+------------+-------+
|    10000000 | customer 10000000 |        218 |     0 |
+-------------+-------------------+------------+-------+
1 row in set (0.00 sec)

insert into customers_new (name, country_id, split) values ('f00',1,1);
Query OK, 1 row affected (0.07 sec)

select * from customers_new order by customer_id desc limit 1;
+-------------+------+------------+-------+
| customer_id | name | country_id | split |
+-------------+------+------------+-------+
|    10000001 | f00  |          1 |     1 |
+-------------+------+------------+-------+
1 row in set (0.00 sec)

Bỏ bảng cũ và đổi tên bảng mới:

drop table customers;
Query OK, 0 rows affected (0.18 sec)

rename table customers_new to customers;
Query OK, 0 rows affected (0.05 sec)

select * from customers order by customer_id desc limit 1;
+-------------+------+------------+-------+
| customer_id | name | country_id | split |
+-------------+------+------------+-------+
|    10000001 | f00  |          1 |     1 |
+-------------+------+------------+-------+
1 row in set (0.00 sec)

Đó là tất cả mọi người!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nối dữ liệu vào trường cơ sở dữ liệu MySQL đã có dữ liệu trong đó

  2. Lỗi Mysql 'Có lỗi -1 từ công cụ lưu trữ'

  3. Tại sao Magento không thể cứu khách hàng sau khi tạo ID?

  4. Làm cách nào để đặt ngày thành NULL trong Yii?

  5. dịch mysql_fetch_array sang PDO ::FETCH_NUM