Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL SELECT查询只有300k行,运行速度非常慢_Mysql_Mariadb_Query Optimization - Fatal编程技术网

MySQL SELECT查询只有300k行,运行速度非常慢

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

我对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,
  `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
列呢?