- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
抱歉,这个主题很笼统,但我想不出更好的了:(
假设我有一些固定字符串(名为 s1、s2、... sn,不超过 5 或 6,在示例中为 4 个),我必须使用一些 VARCHAR(50 ) 字段(称为 t1、t2、t3...不超过 5 个,但示例中为 4 个)。简单的查询看起来像这样:
SELECT id FROM tbl WHERE (s1 = t1) or (s1 = t2) or (s1 = t3) or (s1 = t4) OR
(s2 = t1) or (s2 = t2) or (s2 = t3) or (s2 = t4) OR
(s3 = t1) or (s3 = t2) or (s3 = t3) or (s3 = t4) OR
(s4 = t1) or (s4 = t2) or (s4 = t3) or (s4 = t4) OR
(s5 = t1) or (s5 = t2) or (s5 = t3) or (s5 = t4)
起初,我想在创建 t1,t2... 时生成一个大字符串,将所有 t1+t2+t3+t4 连接起来……因为创建它们时它不会“花费时间”,然后在 mySQL 中使用某种“substr”来查找字符串。类似的东西(同样,我不知道 mySQL 语法)
SELECT id FROM tbl WHERE (s1 in conc) or (s2 in conc) or (s3 in conc) or (s4 in conc) or (s5 in conc)
真正的问题在于表中元素的数量。“tbl”有大约 50k 个元素,我必须使用不同的 s1/s2/s3/s4/s5 运行这个查询大约 10k 次(我也从数据库中获取它们,但我将它们全部读取到内存中以加快速度) .
内存大小不应成为问题:每行大约 250 字节长,因此 RAM 中的表总共可能约为 12Mb。将其加载到数组中并直接在 RAM 中进行搜索是否有意义?此时,有没有一种方法可以强制 mySQL 服务器始终将一张表保留在 RAM 中,并且知道它不能增长太多,而且与它节省的时间相比,12Mb 的内存量非常小? (我正在从 PHP 运行查询)。
当然,我不在乎查询是否看起来愚蠢、丑陋或不优雅。我正在寻找尽可能快的东西,只是因为我必须按照所说的那样运行该查询大约 500k 次。也欢迎任何有关索引等的建议:)
PS:现在我正在考虑在凌晨 4 点的 CRON 作业中每 24 小时执行一次,但是如果能够按需执行并且无需停止服务器 10 分钟......(一毫秒),那就太好了每个都是 500 秒,因此 100% CPU 时间几乎有 9 分钟...)
最佳答案
如果你想要性能,那么你需要使用索引。不幸的是,or
往往会妨碍索引的使用。
一种解决方案如下。独立地在每一列上创建一个索引,这样您就可以为每个“t”字段创建一个索引。然后构建常量字符串,以便您可以使用 in
。将查询表述为:
SELECT id FROM tbl WHERE t1 in (s1, s2, s3, . . .)
UNION
SELECT id FROM tbl WHERE t2 in (s1, s2, s3, . . .)
UNION
SELECT id FROM tbl WHERE t3 in (s1, s2, s3, . . .)
UNION
SELECT id FROM tbl WHERE t4 in (s1, s2, s3, . . .)
UNION
SELECT id FROM tbl WHERE t5 in (s1, s2, s3, . . .)
MySQL 应该为每个子查询使用一个索引。 union
删除重复项会产生开销。想必,通过不同领域的比较,这是可能的。
另一种方法是使用 MATCH() . . . AGAINST
带有全文索引。您可以阅读有关这些的更多信息 here .
关于mySQL 针对 NxM 字符串搜索的优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27039143/
我有两个二维数组(或更高维度),一个定义平均值 (M),一个定义标准差 (S)。是否有一个 python 库(numpy、scipy、...?)允许我生成一个数组 (X),其中包含从相应分布中抽取的样
我必须解决一个问题,当给定一个网格大小 N x M 时,我必须找到“可以放入其中”的平行四边形的数量,这样它们的每个坐标都是一个整数。 这是我的代码: /* ~Keep It Simple
/* Program to demonstrate gaussian elimination on a set of linear simultaneous equations */ #inc
我想在空间上剪切视频以生成 N x M 个文件。 例如,我想把 test.video 拆分成 NxM 的瓦片? Video tiles 最佳答案 您可以使用 ffmpeg 及其 crop filter
我有 NxM 板。我想给它添加 K 个障碍物,但在某种程度上,仍然可以从每个空的空间到每个其他的空空间。我希望它看起来像这样 其中蓝色方块是障碍物。 换句话说,我有一个图形网格,我想从中随机删除 K
抱歉,这个主题很笼统,但我想不出更好的了:( 假设我有一些固定字符串(名为 s1、s2、... sn,不超过 5 或 6,在示例中为 4 个),我必须使用一些 VARCHAR(50 ) 字段(称为 t
我在我的编程书上遇到了以下我无法解决的问题: 给定一个 nxm 网格,编写一个递归算法来找出该网格可以被 3x1 和 1x3 block 填充的方式的数量。 我对 3 x M 网格的逻辑: 找出可用于
是否可以移除/删除 NxM 矩阵每行中的每个最小值创建一个新矩阵? 到目前为止我已经尝试过了,但没有任何运气: for n in range(0,len(matrix_name)): Ma =
我在一个 nxm 数组中有 5 个 numpy 数组,每个数组包含一组随机值。我需要的是根据它们的累计金额递减来打印它们。例如,我的 nXm 数组如下所示: v = [[1,2,3,4], [2,3
我已经在几个页面上搜索过这个,但我只找到了 NxN 矩阵的实现。 如何定义一个 dimBlock 和一个 dimGrid 来计算这个?另外,如何玩: int row = blockIdx.y*bloc
如果我有一个乘法表,例如 3x5: 1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 我把所有这些数字按顺序排列: 1 2 2 3 3 4 4 5 6 6 8 9 1
我有 3 个有效值:a、b、c我可以将它们插入 Nx3 网格中,使得没有行或列包含相同值的单元格。如何计算使用 N 行可以创建的有效模式的数量? 例如,如果N = 4,则有效模式总数为296490。
我有 3 个有效值:a、b、c我可以将它们插入 Nx3 网格中,使得没有行或列包含相同值的单元格。如何计算使用 N 行可以创建的有效模式的数量? 例如,如果N = 4,则有效模式总数为296490。
我想要一个 NxM 矩阵,为简单起见,我们将使用 x=np.arange(25).reshape((5,5)) 我想创建一个新的矩阵 A,其中我可以为第一行中的每个元素存储一个节点,在第二行中存储其
更新:这称为 de Brujin 环面,但我仍然需要在 C# 中找出一个简单的算法。 http://en.wikipedia.org/wiki/De_Bruijn_torus http://datag
这可能是一个愚蠢的问题,但我刚刚开始使用 numpy,我必须弄清楚如何执行一些简单的操作。 假设我有 2x3 数组 array([[1, 3, 5], [2, 4, 6]]) 并且我想对第一列执
我正在实现一个带有记录和内部动态数组的 N x M 矩阵(类),如下所示。 TMat = record public // contents _Elem: array of array
我有多个 NxM 矩阵,想通过变量选择其中一个。我最好的猜测是使用 boost::MultiArray 创建一个 NxMxP 矩阵,然后通过三维选择。 我使用 array_view 实现了它: typ
到目前为止,我想出了顺时针旋转 NxM(N 不一定等于 M)矩阵(当它表示为高度和宽度变量分别存储的一维 vector 时)的唯一方法如下: struct matrix { vector data
我正在尝试使用 HTML 接收高度和宽度值。有了这些值,我希望使用 jQuery 动态创建一个表。我似乎无法显示表格。以下是代码的相关部分: var color, height, width;// S
我是一名优秀的程序员,十分优秀!