我有一个结构的SQLite表“ Details”:
ID Name Category
---------------------
1 Matt 0
2 Shervin 0
3 Bob 0
4 Lee 0
5 Rick 0
6 Suraya 0
7 Susan 0
8 Adam 0
9 Jon 1
10 Lorna 1
... and so on .......
我想随机选择一行,然后从三个不同的行中选择三个名称(同样最好随机选择)。我希望所有这些都可以从一个SQLite语句返回。例如
ID Name Category Name1 Name2 Name 3
----------------------------------------
3 Bob 0 Matt Lee Susan
我的尝试可以从下面看到,但是有两个问题:
谁能建议另一种选择我需要的数据的方法(使用SQLite数据库)?欢迎任何帮助/建议-希望我能达到的目标很明确,请随时提出任何澄清。
我目前的尝试:
SELECT a.Id,
a.Name,
a.Category,
COALESCE((SELECT b.Name
FROM Details b
WHERE b.Id NOT IN (a.Id)
AND b.Category IN (0)
ORDER BY Random()
LIMIT 1),'') as "Name1",
COALESCE((SELECT c.Name
FROM Details c
WHERE c.Id NOT IN (a.Id)
AND c.Category IN (0)
ORDER BY Random()
LIMIT 1),'') as "Name2",
COALESCE((SELECT d.Name
FROM Details d
WHERE d.Id NOT IN (a.Id)
AND d.Category IN (0)
ORDER BY Random()
LIMIT 1),'') as "Name3"
FROM Details a
AND a.Category IN (0)
ORDER BY Random()
LIMIT 1
我在这里与neurino在一起。您还没有说过为什么需要将随机选择的四个名称放在一行中,以及为什么必须在后端进行。
如果您担心性能,请在客户端中生成随机整数(范围> = min(pkcol)和<=
max(pkcol)),直到找到四个不同的行(即实体/名称)。生成的ID之一可能不存在任何行,但是只需几毫秒即可找到。采用这种随机密钥方法,您可以避免排序。即使对于具有数十亿行的表,该方法也将快速起作用。
PS(发现它是一个iPhone应用程序之后),您需要调用一次以获取最小和最大ID值(它是PK,因此使用了索引)。然后,您至少需要再次调用数据库(再次,使用索引辅助),以使用您随机生成的PK值来获得四个不同的行[其中(a,b,c,d)中的ID]最大调用数是未知的;
多少取决于主键序列的密度。我不认为这将是过多的I / O,并且与Random()的命令相比,它的资源占用将大大减少-
尤其是在表中有很多行的情况下。您总是可以随机生成一个ID列表,其中包含8、12、16个ID,并且如果返回的行数多于4,则让客户端只选择所需的4行。
PPS通常,数据库连接的实例化非常昂贵,并且您不希望循环执行此操作,也不想执行比所需次数更多的操作。但是您可以打开一个连接,运行两个或三个有效的选择,每个选择返回几行,然后在完成当前任务后关闭。
本文向大家介绍Mysql查询语句优化技巧,包括了Mysql查询语句优化技巧的使用技巧和注意事项,需要的朋友参考一下 索引优化,查询优化,查询缓存,服务器设置优化,操作系统和硬件优化,应用层面优化(web服务器,缓存)等等。这里的记录的优化技巧更适用于开发人员,都是从网络上收集和自己整理的,主要是查询语句上面的优化,其它层面的优化技巧在此不做记录。 查询的开销指标: 执行时间 检查的行数 返回的行数
mysql数据库里面一个商品表;商品表有200多个字段,有2000万条数据,可是商品分页的时候,sql语句老是出现在慢查询日志里,请教高手如何优化? select * from d_shop order by id DESC limit 200, 220
问题内容: 我在学校被告知,修改a的index变量是一种不好的做法: 范例: 有论据认为, 某些编译器优化可以优化循环, 而无需重新计算索引并限制每个循环。 我进行了一些测试,似乎默认情况下每次都会重新计算索引和绑定。 我想知道是否有可能在中激活这种功能? 例如,优化这种循环: 无需写: 这只是一个例子,我很想尝试一下改进。 编辑 根据Peter Lawrey的回答, 为什么在这个简单的示例中JV
我有个商品表里面有30多万的数据,商品标题是中文,系统模糊查询的时候老是会显示慢,同时我在这个字段创建了一个普通索引;但是查询还是会慢?请教高手要如何进行优化? select * from goods_name where title_name like "%电器%"
7.2.1. EXPLAIN语法(获取SELECT相关信息) 7.2.2. 估计查询性能 7.2.3. SELECT查询的速度 7.2.4. MySQL怎样优化WHERE子句 7.2.5. 范围优化 7.2.6. 索引合并优化 7.2.7. MySQL如何优化IS NULL 7.2.8. MySQL如何优化DISTINCT 7.2.9. MySQL如何优化LEFT JOIN和RIGHT JOIN
主要内容:1 SHOW ENGINES,2 SHOW PROCESSLIST,3 SHOW STATUS LIKE ‘InnoDB_row_lock%’,4 SHOW ENGINE INNODB STATUS,5 SHOW INDEXS,6 ALTER TABLE xx ENGINE = INNODB,7 ANALYZE TABLE常见MySQL数据库优化的sql语句。 1 SHOW ENGINES 查看执行引擎以及默认引擎。 2 SHOW PROCESSLIST SHOW PROCESSLIS