SELECT EXISTS(SELECT /p2/ FROM table WHERE id = 1)
SELECT /p2/ FROM table WHERE id = 1 LIMIT 1
COUNT(id)
id
fetchColumn()
rowCount()
从以下3个部分中,检查行是否存在的最佳方法是什么,无论是否具有检索数据的能力。
/查询/ SELECT id FROM table WHERE id = 1 LIMIT 1
/功能/ rowCount()
/查询/ SELECT EXISTS(SELECT COUNT(id) FROM table WHERE id = 1)
/功能/ fetchColumn()
在您看来,最好的方法是什么?
答案 0 :(得分:2)
best 我想你的意思是在MySQL服务器和客户端上消耗的资源最少。
就是这样:
SELECT COUNT(*) count FROM table WHERE id=1
您获得一行一列结果集。如果该列为零,则找不到该行。如果列是1,则找到一行。如果列大于该列,则找到多行。
出于几个原因,这是一个很好的解决方案。
COUNT(*)
效率很高,尤其是在id
被编入索引的情况下。如果添加到此查询,添加LIMIT 1
将不会执行任何操作。它本身就是一行结果集。你可以添加它,但是你会让下一个看着你的代码的人想知道你想要做什么,并想知道你是否犯了某种错误。
COUNT(*)
计算与WHERE
语句匹配的所有行。 COUNT(id)
略慢,因为它计算所有行,除非它们的id
值为空。它必须进行检查。出于这个原因,人们通常使用COUNT(*)
,除非他们有可能想要忽略空值。如果您在代码中添加了COUNT(id)
,则下一个处理代码的人将不得不花一些时间通过计算id
而不是*
来确定您是否有任何特殊意义。
你可以使用;他们给出了相同的结果。