只需让自己成为Asustor NAS即可处理我的视频,图片,音乐等。 我认为在家里既有台式机又有笔记本电脑,我认为在NAS(已经预先安装了MariaDB的NAS)上设置数据库是个好主意。
设置:RAID 1,通过具有千兆位连接的1.3 Mbps WiFi连接,磁盘最大读取速度约为110MB / s。使用BlackMagic Benchmark达到60MB / s。
查询:
SELECT items.title, items.discount, items.qtd, items.price, ((price * qtd) - discount) AS total, DATE_FORMAT(orders.created_at, '%m-%y')
FROM items
INNER JOIN orders ON orders.order_id = items.order_id
ORDER BY created_at;
表orders
具有约1.8k行,表items
具有约4.7k行。该查询影响5k行,运行时间在4.8到7.0秒之间,对于这样一个简单的查询来说似乎是荒谬的。我曾经在本地主机上运行相同的查询(好吧,它是NVMe SSD,我得到的速度要快得多),以毫秒为单位。 order_id
是一个VARCHAR,其中包含大约10个字符。
将所有数据插入所有表中大约需要7分钟(最后一次是9分钟):
`orders` - 1.7k rows, 11 columns
`items` - 4.8k rows, 12 columns
`customers` - 1.7k rows, 9 columns
我的问题:
非常感谢。
**Tables:**
`CREATE TABLE `orders` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`order_id` varchar(15) DEFAULT NULL COMMENT 'VA',
`created_at` datetime DEFAULT NULL,
`gateway` varchar(25) DEFAULT NULL,
`total` decimal(15,0) DEFAULT NULL,
`subtotal` decimal(15,0) DEFAULT NULL,
`status` varchar(20) DEFAULT NULL,
`discounts` decimal(15,0) DEFAULT NULL,
`total_price` decimal(15,0) DEFAULT NULL,
`order_number` varchar(15) DEFAULT NULL,
`processing` varchar(15) DEFAULT NULL,
`customer_id` varchar(15) DEFAULT NULL,
`number` varchar(15) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `number` (`number`),
UNIQUE KEY `order_id` (`order_id`),
KEY `customer_id` (`customer_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1712 DEFAULT CHARSET=utf8;`
答案 0 :(得分:1)
是的,这是一种不好的表现。为查询正确建立索引将有助于解决查询的性能问题。仅板载512M硬盘就很难使NAS使用innodb_buffer_pool和可用内存作为磁盘缓存。
使用连接和顺序帮助正确地索引表。设计更改以将整数主键用于联接。第一步,如果order_id
确实不是utf8,而只是对该列进行latin1更改,这会使键变小,那么也可以将其更改为主键。
由于这是查询中整个两个表的数据搜索,因此,如果它可以全部保留在RAM中,那么它只会消除IO延迟。
托管数据库将提供更多RAM,并可能提供更快的CPU。