Hellow,wrold!
我在网上看过这个,但我找不到合适的解决方案。我不是sql中的专家,我有最简单的表,其中包含10列,8.000.000行和最简单的查询(我正在使用php)
SELECT `field_name_1`, `field_name_2`, `field_name_3`
FROM `table_name`
WHERE `some_field`=#here_is_an_integer#
ORDER BY `some_field`
LIMIT 10;
可能是某些索引,缓存或类似的内容。
如果你有一些想法,我会很高兴你帮助或只是说我应该遵循的方式来找到解决方案。
谢谢!
答案 0 :(得分:4)
在some_field
上使用索引,并以最佳方式在使用SQL WHERE
的所有列上使用索引。
如果您只想显示数据,请使用LIMIT
在Sql上使用分页
就像Admin设置缓存和其他Mysql(或MariaDB)限制更好的搜索一样(Top 20+ MySQL Best Practices)
...简单的答案,如果你有空位,来自
的MySQL> ALTER TABLE table_name
ADD INDEX(some_field
);
答案 1 :(得分:1)
以下是需要考虑的事项:
答案 2 :(得分:0)
也许你可以更好地形式化你的问题(可能在某处使用问号)。
无论如何,如果你想提高单个表上select的速度,比如你描述的那个表,那么至少WHERE子句中涉及的列应该有一个合适的索引。如果它是整数类型,这可能只是标准的'KEY(some_field
)',否则如果它是一个字符串(即varchar或varbinary)类型字段,在第一个 n中具有合理的基数字节,您可以使用前缀索引并执行类似'KEY({{1}}(8))'的操作,并最小化索引大小(随后通过减少btree搜索时间来提高性能)。
理想情况下,服务器将具有足够的ram(并且如果使用innodb,则具有足够大的innodb_buffer_pool_size)以将上述索引保留在内存中。另请查看https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_adaptive_hash_index ...如果您的服务器具有可用资源,并且您的应用程序具有数据访问模式以证明其合理性。
希望这有帮助!