为什么MemSQL比使用二进制列上的子串操作的Select SQL的SQL Server慢

时间:2015-07-13 17:51:22

标签: memsql

我有一个带有两个二进制列的表,用于存储最多64个字节的字符串和两个整数列。这个表有1000多万行,使用2GB内存,7GB可用内存,所以剩下大量可用内存。我还根据http://docs.memsql.com/latest/setup/best_practices/配置了MemSQL。

对于将二进制列与某些值进行比较的简单选择SQL,MemSQL比SQL Server快3倍,因此我们可以使用MemSQL排除配置或硬件等问题。

对于使用

的复杂SQL
  • Select子句中的子字符串操作和
  • where子句中的子字符串和长度操作

MemSQL比SQL Server慢大约10倍。在最初的几次运行之后,在MemSQL上测量了这些SQL的性能,以确保不包括SQL编译持续时间。看起来MemSQL的性能问题与它如何处理二进制列以及子字符串和字符串长度操作有关。

  1. 有没有人看到过与MemSQL类似的性能问题?如果是这样,列类型和SQL操作是什么?

  2. 有没有人在varchar列上看到与MemSQL类似的性能问题?

  3. 感谢。

    迈克尔,

2 个答案:

答案 0 :(得分:1)

我的建议:返回rowstore,但使用VARBINARY而不是BINARY,请考虑在列上添加索引或创建持久列,并尝试使用like重写谓词。<登记/> 如果您粘贴示例查询,我可以帮助您转换它。

相关文档在这里 dev.mysql.com/doc/refman/5.0/en/pattern-matching.html docs.memsql.com/4.0/concepts/computed_columns

祝你好运。

答案 1 :(得分:0)

很难对perf问题做出一般性答案,但在你的情况下,我会尝试一个MemSQL列存储表而不是内存中的rowstore表。既然您正在进行全面扫描,那么您将获得将列数据紧挨着堆叠的好处。

http://docs.memsql.com/4.0/concepts/columnar/