设计架构之前,请先了解您的要求(如果可能)。
了解数据,1)建立索引2)使用的存储类型,3)供应商引擎或功能;即...缓存,内存功能4)数据类型5)表的大小6)查询频率7)资源共享时的相关工作量8)测试
A)要求会有所不同。如果硬件不能支持预期的工作负载,则应重新评估如何在工作负载中提供要求。关于表的添加列。如果数据库支持视图,则可以创建具有特定命名列的特定数据的索引视图(?)(相对于选择“ *”)。定期检查您的数据和架构,以确保您永远不会遇到“垃圾输入”->“垃圾输出”综合症。
假设没有其他解决方案;您可以考虑以下因素。一个问题总是有多种解决方案。
1)索引:select *将执行表格扫描。根据各种因素,这可能涉及磁盘搜索和/或与其他查询的竞争。如果该表是多用途的,请确保所有查询都可以执行并在目标时间以下执行。如果有大量数据,并且您的网络或其他资源没有被调整;您需要考虑到这一点。该数据库是一个共享环境。
2)存储类型。即:如果您使用的是SSD,磁盘或内存。I / O时间和系统/ cpu上的负载会有所不同。
3)DBA可以调整数据库/表以获得更高的性能吗?不管出于什么原因,团队都认为选择'*'是解决问题的最佳方法。可以将数据库或表加载到内存中。(或其他方法...也许响应被设计为以2-3秒的延迟响应?---同时播放广告以赚取公司收入...)
4)从基线开始。了解您的数据类型,以及如何显示结果。较小的数据类型,字段数减少了结果集中返回的数据量。这使资源可用于其他系统需求。系统资源通常有限制;在这些限制之下“始终”工作可确保稳定性和可预测的行为。
5)表/数据的大小。选择'*'在小表中很常见。它们通常适合内存,响应时间很快。再次...查看您的要求。计划特征蠕变;始终针对当前和将来的需求进行规划。
6)查询频率。请注意系统上的其他工作负载。如果此查询每秒触发一次,则表很小。可以将结果集设计为保留在缓存/内存中。但是,如果查询是一个频繁的批处理过程,其中包含千兆字节/千兆字节的数据……您最好分配专用资源以确保其他工作负载不受影响。
7)相关的工作量。了解如何使用资源。网络/系统/数据库/表/应用程序是专用的还是共享的?谁是利益相关者?这是用于生产,开发还是质量检查?这是临时的“快速修复”吗?您是否测试过该方案?您会惊讶于当前的硬件上可能存在多少问题。(是的,性能很快...但是设计/性能仍然下降。)系统是否需要每秒执行10K查询而不是每秒5-10查询。是数据库服务器专用于监视还是在其他应用程序中监视共享资源上的执行。一些应用程序/语言;O / S将消耗100%的内存,从而导致各种症状/问题。
8)测试:测试您的理论,并尽可能多地了解。您选择的“ *”问题可能很重要,或者甚至您不必担心。
SELECT COUNT(*)
变坏的年代令人难以置信的过时。有关信息SELECT *
-请参见:stackoverflow.com/questions/1960036/...