Chỉ mục chính xác cho truy vấn này là gì.
Tôi đã thử đưa ra các kết hợp chỉ mục khác nhau cho truy vấn này nhưng nó vẫn sử dụng các tệp tạm thời, sắp xếp tệp, v.v.
Tổng số dữ liệu bảng- 7,60,346
产品
= 'dress' - tổng số hàng = 122 554
TẠO BẢNG NẾU KHÔNG TỒN TẠI `product_data` (
`table_id` int(11) KHÔNG AUTO_INCREMENT NULL,
`id` int(11) KHÔNG NULL,
`price` int(11) KHÔNG NULL,
`store` varchar(255) KHÔNG NULL,
`thương hiệu` varchar(255) NULL mặc định,
`product` varchar(255) KHÔNG NULL,
`model` varchar(255) KHÔNG NULL,
`size` varchar(50) KHÔNG NULL,
`giảm giá` varchar(255) KHÔNG NULL,
`giới_id` int(11) KHÔNG NULL,
`sẵn có` int(11) KHÔNG NULL,
KHÓA CHÍNH (`bảng_id`),
KHÓA ĐỘC ĐÁO `table_id` (`table_id`),
KHÓA `id` (`id`),
TỪ KHÓA `giảm giá` (`giảm giá`),
KEY `step_one` (`sản phẩm`,`sẵn có`),
KEY `step_two` (`product`,`availability`,`brand`,`store`),
TỪ KHÓA `bước_ba` (`sản phẩm`,`sẵn có`,`thương hiệu`,`cửa hàng`,`id`),
TỪ KHÓA `step_four` (`thương hiệu`,`cửa hàng`),
KEY `bước_năm` (`thương hiệu`,`cửa hàng`,`id`)
) ĐỘNG CƠ=InnoDB;
查询:
CHỌN id, cửa hàng, nhãn hiệu TỪ `product_data` WHERE sản phẩm = 'váy' và
tính sẵn có='1' nhóm theo thương hiệu,đơn hàng theo cửa hàng giới hạn 10;
excu..time :- (Tổng cộng 10, Truy vấn mất 1,0941 giây)
Giải thích kế hoạch:
Các phím có thể có: - bước_một, bước_hai, bước_ba, bước_bốn, bước_năm
chìa khóa:- bước_hai
Trích dẫn:- hằng số, hằng số
ĐƯỢC RỒI:- 229438
thêm vào:-Sử dụng ở đâu; sử dụng tạm thời; sử dụng sắp xếp tập tin
Tôi đã thử các chỉ mục này
Chìa khóa
bước_một(产品
,sẵn có
)
Chìa khóa
bước_hai (product
,sẵn có
,thương hiệu
,store
)
Chìa khóa
bước_ba (product
,sẵn có
,thương hiệu
,store
,NHẬN DẠNG
)
Chìa khóa
bước_bốn (thương hiệu
,store
)
Chìa khóa
bước_năm (thương hiệu
,store
,NHẬN DẠNG
)
Vấn đề thực sự không phải là chỉ số, mà là GROUP BY
Và ORDER BY
Sự không phù hợp giữa GIỚI HẠN
việc sử dụng.
cái này
INDEX(sản phẩm, tình trạng còn hàng, cửa hàng, nhãn hiệu, id)
sẽ được "che đậy" theo đúng thứ tự. Nhưng xin lưu ý rằng tôi đã đổi chỗ store
Và thương hiệu
...
Thay đổi truy vấn thành
CHỌN id, cửa hàng, thương hiệu
TỪ `dữ liệu sản phẩm`
WHERE sản phẩm='váy'
và tính sẵn có='1'
NHÓM THEO cửa hàng, thương hiệu -- thay đổi
ĐẶT HÀNG THEO cửa hàng, nhãn hiệu -- thay đổi
giới hạn 10;
Điều này sẽ GROUP BY
Thay đổi thành store
Bắt đầu với sự phản ánh ORDER BY
Sắp xếp - Điều này tránh việc sắp xếp bổ sung. và sẽ ORDER BY
Thay đổi thành GROUP BY
Tương tự để kết hợp cả hai.
Có tính đến những thay đổi này,CHỈ SỐ
Bây giờ bạn có thể đi đến tận cùng GIỚI HẠN
, cho phép quá trình xử lý chỉ xem xét 10 hàng thay vì một tập hợp lớn hơn.
Bất cứ điều gì ít hơn tất cả những thay đổi này sẽ không hiệu quả.
Thảo luận thêm:
INDEX(sản phẩm, tình trạng còn hàng, -- hai giá trị này có thể theo một trong hai thứ tự
cửa hàng, thương hiệu -- phải khớp cả `GROUP BY` và `ORDER BY`
id) -- đính vào (ở cuối) để "che"
“che phủ” có nghĩa là tất cả SELECT
Các cột đều nằm trong CHỈ SỐ
được tìm thấy trong , do đó không cần truy cập dữ liệu.
但是...Toàn bộ truy vấn không có ý nghĩa,因为 SELECT
bao gồm trong NHẬN DẠNG
. Nếu bạn muốn biết cửa hàng nào có sẵn váy, hãy xóa NHẬN DẠNG
. Nếu bạn muốn liệt kê tất cả quần áo có sẵn, hãy đặt NHẬN DẠNG
Thay đổi thành GROUP_CONCAT(id)
.
Tôi là một lập trình viên xuất sắc, rất giỏi!