我正在使用MemSQL,它似乎非常快。但是当我执行SELECT * FROM [some big table]
时,通常需要很长时间。我可以在MemSQL Opt中看到很多流量,几乎没有CPU /内存使用量。我已经将我的sql编辑器(DataGrip)设置为仅获取500行,但它没有帮助(我知道我可以使用limit命令)。
我的问题是发生了什么?是否所有分区都将所有结果传输到我的客户端,之后只能获取500行?有什么方法可以监控吗?
答案 0 :(得分:0)
发生了什么情况非常依赖于情境,但您可以使用EXPLAIN SELECT * FROM [some big table]
,这应该告诉您查询在广义上做了什么,可以告诉您查询执行中的哪个步骤正在执行很长一段时间
如果它不会将所有结果传输到客户端,那么客户端正在为您添加限制。您可以使用show plancache
并查找是否存在SELECT * FROM [some big table] LIMIT 500
,以查看您的客户是否自动添加该Public Sub saveAttach(itm As Outlook.MailItem)
Dim objAtt As Outlook.Attachment
Dim saveFolder As String
Dim pos As Integer
saveFolder = "C:\Location\to\be\save\"
For Each objAtt In itm.Attachments
pos = InStr(objAtt.DisplayName, "Name of the attachment to save")
If pos <> 0 Then
objAtt.SaveAsFile saveFolder & objAtt.DisplayName
Set objAtt = Nothing
End If
Next
End Sub
。如果它运行带有限制的查询,它应该会更快,但如果它只是截断你的结果,那就不会让我感到惊讶 - 这根本不会提高速度。
如果你监控cpu,内存,磁盘I / O和网络,那么基本上你已经掌握了所有内容。除非您使用列存储,否则根本不应使用磁盘,因此存在错误或网络瓶颈。最可能的罪魁祸首是粗略的分布式连接,这些连接可能非常慢 - 特别是在旧版本中。
答案 1 :(得分:0)
当您执行类似的查询时,agregator需要从叶子中获取所有行,并将它们流式传输到客户端。聚合器在客户端读取行之前获取行,因此它将通过网络传输超过500行,直到它填充其缓冲区。使用LIMIT是读取有限行数的正确方法。