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

Mysql cải thiện tốc độ CHỌN

dành thời gian để đọc câu trả lời của tôi ở đây:(có số lượng tương tự như của bạn)

500 triệu hàng, quét phạm vi 15 triệu hàng trong 0,02 giây.

MySQL và NoSQL:Giúp tôi chọn đúng

sau đó sửa đổi công cụ bảng của bạn thành innodb như sau:

create table tag_date_value
(
tag_id smallint unsigned not null, -- i prefer ints to chars
tag_date datetime not null, -- can we make this date vs datetime ?
value int unsigned not null default 0, -- or whatever datatype you require
primary key (tag_id, tag_date) -- clustered composite PK
)
engine=innodb;

thay vào đó bạn có thể coi những thứ sau là khóa chính:

primary key (tag_id, tag_date, value) -- added value save some I/O

nhưng chỉ khi giá trị không phải là một số loại varchar LARGE!

truy vấn như trước:

select
 tag_date, 
 value
from
 tag_date_value
where
 tag_id = 1 and
 tag_date between 'x' and 'y'
order by
 tag_date;

hy vọng điều này sẽ giúp :)

CHỈNH SỬA

Ồ quên đề cập - không sử dụng bảng thay đổi để thay đổi loại công cụ từ mysiam sang innodb mà thay vào đó là kết xuất dữ liệu vào tệp csv và nhập lại vào bảng innodb mới được tạo và trống.

lưu ý rằng tôi đang sắp xếp dữ liệu trong quá trình xuất - các chỉ mục được nhóm lại là CHÌA KHÓA!

Xuất

select * into outfile 'tag_dat_value_001.dat' 
fields terminated by '|' optionally enclosed by '"'
lines terminated by '\r\n'
from
 tag_date_value
where
 tag_id between 1 and 50
order by
 tag_id, tag_date;

select * into outfile 'tag_dat_value_002.dat' 
fields terminated by '|' optionally enclosed by '"'
lines terminated by '\r\n'
from
 tag_date_value
where
 tag_id between 51 and 100
order by
 tag_id, tag_date;

-- etc...

Nhập

nhập lại vào bảng theo đúng thứ tự!

start transaction;

load data infile 'tag_dat_value_001.dat' 
into table tag_date_value
fields terminated by '|' optionally enclosed by '"'
lines terminated by '\r\n'
(
tag_id,
tag_date,
value
);

commit;

-- etc...


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. INNER hoặc LEFT Kết hợp nhiều bản ghi bảng thành một hàng duy nhất

  2. Đặt giá trị mặc định nếu chuỗi trống được chuyển

  3. Trao đổi giá trị cột trong MySQL

  4. Trò chuyện trực tiếp với PHP và jQuery. Lưu trữ thông tin ở đâu? Mysql hoặc tệp?

  5. MySQL tính toán trung bình động của N hàng