我有下面的SQL查询并想知道是否有方法来优化查询。MySQL上的SQL查询优化
SELECT * FROM LogEntry WHERE UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(updateTime) > 10;
将增加对录入指数提高的东西更多的性能可以做,以提高性能
我有下面的SQL查询并想知道是否有方法来优化查询。MySQL上的SQL查询优化
SELECT * FROM LogEntry WHERE UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(updateTime) > 10;
将增加对录入指数提高的东西更多的性能可以做,以提高性能
是。你需要想办法去除列上的功能。所以,如果我有逻辑正确的:
SELECT le.*
FROM LogEntry le
WHERE le.updateTime < NOW() - interval 10 second;
这可以再取上LogEntry(updateTime)
指数的优势。
有很好的理由明确列出返回的列。这只会对性能产生很小的影响 - 除非行大小相当大。
“不要隐藏函数内部的索引列('updateTime')('UNIX_TIMESTAMP'和'-')”是一个重要的规则是优化。 –
的第一件事我会做的就是删除您选择*,然后选择特定的列
这通常是有用的,但对Gordon的优化来说性能几乎没有那么重要。 –
除了优化请求之外,您还可以考虑对表进行分区。例如,您可以在updateTime上对表LogEntry进行分区。如果您的表格中有大量数据,它会大大加快您的请求速度。
注意:要在updateTime上对表进行分区,updateTime必须是主键的一部分。
分区将无济于事。优化器无法在该表达式中看到“unixTime”。所以,它不能做任何修剪。 –
我的建议是除了Gordon的优化之外,对表格进行分区 –
在这种情况下,分区对性能没有帮助。 (此外,由于只有10秒被排除[也许这是一个错误],整个表将被扫描。) –
查询中的错误?这只会排除最近10秒内的行;那几乎不是全部桌子? –