MySQL SELECT查询只有300k行,运行速度非常慢
我对MySQL选择查询时间有疑问。 这是我的桌子:MySQL SELECT查询只有300k行,运行速度非常慢,mysql,mariadb,query-optimization,Mysql,Mariadb,Query Optimization,我对MySQL选择查询时间有疑问。 这是我的桌子: CREATE TABLE `order_items` ( `id_order_item` bigint(20) NOT NULL, `order_id` bigint(20) NOT NULL, `order_item_id` bigint(20) NOT NULL, `seller_sku` varchar(100) NOT NULL, `shop_sku` varchar(100) NOT NULL, `produc
CREATE TABLE `order_items` (
`id_order_item` bigint(20) NOT NULL,
`order_id` bigint(20) NOT NULL,
`order_item_id` bigint(20) NOT NULL,
`seller_sku` varchar(100) NOT NULL,
`shop_sku` varchar(100) NOT NULL,
`product_name` varchar(255) DEFAULT NULL,
`item_price` decimal(10,2) NOT NULL DEFAULT '0.00',
`paid_price` decimal(10,2) NOT NULL DEFAULT '0.00',
`tax_amount` decimal(10,2) NOT NULL DEFAULT '0.00',
`shipping_amount` decimal(10,2) NOT NULL DEFAULT '0.00',
`shipping_service_cost` decimal(10,2) NOT NULL DEFAULT '0.00',
`voucher_amount` decimal(10,2) NOT NULL DEFAULT '0.00',
`status` varchar(50) NOT NULL,
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `order_items`
ADD PRIMARY KEY (`id_order_item`),
ADD KEY `seller_sku` (`seller_sku`,`shop_sku`),
ADD KEY `order_id` (`order_id`,`order_item_id`);
我在这个表上只有30万行,查询如下:
SELECT * FROM `order_items` WHERE order_item_id=584706188389248
花了8-12秒
我使用16GB RAM和8vCPU VP。
这是我的
symbolic-links=0
performance-schema=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
innodb_file_per_table=1
max_allowed_packet=268435456
open_files_limit=100000
max_connections = 500
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
innodb_buffer_pool_size=12G
innodb_log_file_size=512M
innodb_buffer_pool_instances=6
slow_query_log=1
long_query_time=1
log_output=FILE
slow_query_log_file=/var/lib/mysql/slow.log
有没有解决这个问题的建议?
谢谢您。请尝试仅在order\u item\u id
列上设置索引,因为这是select语句中引用的唯一列
您当前在两个组合列上有一个索引,order\u item\u id
和order\u id
ALTER TABLE `order_items`
ADD KEY `order_item_id` (`order_item_id`);
Sitenote:您可能应该使用
utf8mb4
的字符集/排序规则,而不是基本的utf8,因为这实际上包含所有UTF-8字符 您在哪里执行查询?我从mysql日志文件中获得了查询时间。我尝试从phpmyadmin执行查询,得到了相同的结果代码>顺便说一句,一个包含名为id\u order\u item
和order\u item\u id
的列的表是一件奇妙的事情。为什么不也有一个item\u id\u order
列呢?