精华内容
下载资源
问答
  • 这个表与我必须从中读取数据的表相同,有时整个数据库由于选择数据而变得很慢,同时还有许多挂起的插入。我把索引放在我在where语句中使用的每个字段上,所以我真的不知道为什么select变得如此缓慢。有人能给我一个提示...

    我有一个很大的mysql表(大约5米行),我经常在上面插入数据。

    这个表与我必须从中读取数据的表相同,有时整个数据库由于选择数据而变得很慢,同时还有许多挂起的插入。

    我把索引放在我在where语句中使用的每个字段上,所以我真的不知道为什么select变得如此缓慢。

    有人能给我一个提示来解决这个问题吗?

    这是表和查询的SQL

    CREATE TABLE `messages` (

    `id` int(10) unsigned NOT NULL auto_increment,

    `user_id` int(10) unsigned NOT NULL default '0',

    `dest` varchar(20) character set latin1 default NULL,

    `body` text character set latin1,

    `sent_on` timestamp NOT NULL default CURRENT_TIMESTAMP,

    `md5` varchar(32) character set latin1 NOT NULL default '',

    `interface` enum('mobile','desktop') default NULL,

    PRIMARY KEY (`id`),

    KEY `user_id` (`user_id`),

    KEY `md5` (`md5`),

    FULLTEXT KEY `dest` (`dest`,`body`),

    FULLTEXT KEY `body` (`body`)

    ) ENGINE=MyISAM AUTO_INCREMENT=7074256 DEFAULT CHARSET=utf8

    这里的问题是:

    EXPLAIN SELECT SQL_CALC_FOUND_ROWS id, sent_on, dest AS who, body,interface FROM messages WHERE user_id = 2 ORDER BY sent_on DESC LIMIT 0,50 \G;

    *************************** 1. row ***************************

    id: 1

    select_type: SIMPLE

    table: messages

    type: ref

    possible_keys: user_id

    key: user_id

    key_len: 4

    ref: const

    rows: 13997

    Extra: Using where; Using filesort

    1 row in set (0.00 sec)

    展开全文
  • Mac哪款数据库管理器好用呢?SQLPro Studio for Mac是Mac上一款简单的macOS 数据库管理器,使用sqlpro studio mac可以创建表格,自定义查询,自动完成和语法突出显示,同时可以执行多个查询,并同时显示每个查询的...

    Mac哪款数据库管理器好用呢?SQLPro Studio for Mac是Mac上一款简单的macOS 数据库管理器,使用sqlpro studio mac可以创建表格,自定义查询,自动完成和语法突出显示,同时可以执行多个查询,并同时显示每个查询的结果,包括任何错误和消息。

    8e9e518a555a08ddd7bd838507c16ce0.png

    SQLPro Studio for Mac功能介绍

    多个数据库支持

    SQLPro支持许多数据库类型,包括MySQL,MariaDB,Postgres,Microsoft SQL Server(2005及更高版本)和Oracle(8i及更高版本)。

    最好的基础知识

    表创建,自定义查询,自动完成和语法高亮只是您可以预期的一些功能。更新或设计一个表格?我们可以帮你。

    4dc30633a27b3d362e352f352c5cf5af.png

    直观的界面

    SQLPro拥有直观的界面,可以轻松访问最基本的高级数据库需求。

    云支持

    与云提供商合作,如Amazon关系数据库服务,Microsoft Azure或Heroku?没问题,SQLPro Studio支持大多数基于云的实例。

    6f17290a7314a3f76b668c2bade29084.png

    多个结果集

    需要一次查看多个表的结果?您可以执行多个查询并同时显示每个查询的结果,包括任何错误和消息。

    没有Java

    SQLPro是一个100%原生Mac应用程序。这意味着它可以并且将胜过任何其他基于Java的数据库管理界面。

    02f3313119a332d52cc15fe0184bf930.png

    SQLPro Studio for Mac软件特色

    智能感知/ SQL自动完成。

    语法与定制主题突出。

    基于选项卡的用户界面。

    快速访问表和列。

    SQL美化/格式化。

    为+支持的NTLMv2。

    支持Netbios的。

    主密码的支持,以提高安全性。

    SQLPro Studio for Mac更新日志

    1、MySQL / MariaDB-修复了扩展触发器可能显示错误的问题。

    2、MSSQL-修复了“修改”或“脚本作为更改”可能显示CREATE而不是存储过程更改的问题。

    3、修复了编辑结果并单击“应用”(不带预览)时有时会产生错误的问题

    4、MSSQL-修复了使用多个结果集并编辑/删除第一个结果集之后的结果集会使用第一个结果集的表名的问题

    5、如果没有打开任何选项卡并且单击了历史记录菜单项或激活了键盘快捷键,则将打开一个新的选项卡,其中显示历史记录弹出

    6、Oracle-修复了导出到CSV可能显示“无表”的问题

    7、通过结果网格插入行不再弹出插入对话框。您仍然可以通过右键单击一行并选择“编辑”来访问对话框。

    8、现在,您可以在结果网格中复制行。

    9、MSSQL-改进数据库访问

    10、MSSQL-添加了一个选项来隐藏用户无权访问的数据库

    展开全文
  • 在企业内部,仪表板应该具有最新信息,尽管有大量数据支持它,但在任何设备上都可以获得快速响应时间。最终用户可能希望单击图中的条形图或列将导致更...仪表板的代码可在此Gist:app.R中找到实际连接到数据库的仪表...

    9edcadb833c06050ec9951c35a42b1ba.png

    在企业内部,仪表板应该具有最新信息,尽管有大量数据支持它,但在任何设备上都可以获得快速响应时间。最终用户可能希望单击图中的条形图或列将导致更详细的报告或构成该编号的实际记录列表。本文将介绍如何使用一组R软件包以及Shiny来满足这些要求。

    代码

    上图所示仪表板的工作示例如下:航班仪表板。该示例具有本文中讨论的所有功能,但数据库连接除外。仪表板的代码可在此Gist:app.R中找到

    实际连接到数据库的仪表板代码可在此Gist:app.R中找到

    shinydashboard

    该shinydashboard包有三个重要的优点:

    1. 提供开箱即用的框架,以在Shiny中创建仪表板。这节省了大量时间,因为开发人员不必使用“base”Shiny手动创建仪表板功能。
    2. 具有仪表板 - 友好标签结构。这允许开发人员快速入门。内dashboardPage()标签,在dashboardHeader(),dashboardSidebar()并且dashboardBody()可以添加到容易制定出一个新的仪表板。
    3. 它是移动就绪的。没有任何其他代码,仪表板布局将自动适应较小的屏幕。

    快速举例

    如果您是新手shinydashboard,请随意复制并粘贴以下代码,以查看您环境中非常简单的仪表板:

    library(shinydashboard)
    library(shiny)
    ui <- dashboardPage(
      dashboardHeader(title = "Quick Example"),
      dashboardSidebar(textInput("text", "Text")),
      dashboardBody(
        valueBox(100, "Basic example"),
        tableOutput("mtcars")
      )
    )
    server <- function(input, output) {
      output$mtcars <- renderTable(head(mtcars))
    }
    shinyApp(ui, server)

    部署使用 config

    在开发过程中使用的凭据与用于发布的凭证不同是很常见的。对于数据库,适应此目的的最佳方法是在两个环境中设置具有相同别名的数据源名称(DSN)。如果无法设置DSN,则config可以使用该程序包在不同环境中使用的凭据之间切换不可见。该RStudio连接产品支持使用的config包装开箱。使用config代替Kerberos或DSN的另一个优点是使用的凭证不会出现在R代码的纯文本中。Make scripts可移植文章中提供了更详细的说明。

    此代码段是一个config能够读取的示例YAML文件。它有一个用于本地开发的驱动程序名称,以及在部署期间使用的其他名称:

    default:
      mssql:
          Driver: "SQL Server"
          Server: "[server's path]"
          Database: "[database name]"
          UID: "[user id]"
          PWD: "[pasword]"
          Port: 1433
    rsconnect:
      mssql:
          Driver: "SQLServer"
          Server: "[server's path]"
          Database: "[database name]"
          UID: "[user id]"
          PWD: "[pasword]"
          Port: 1433

    default开发时将自动使用该设置,并且RStudio Connect将rsconnect在执行此代码时使用这些值:

    dw <- config::get("mssql")
    con <- DBI::dbConnect(odbc::odbc(),
                          Driver = dw$Driver,
                          Server = dw$Server,
                          UID    = dw$UID,
                          PWD    = dw$PWD,
                          Port   = dw$Port,
                          Database = dw$Database)

    purrr

    Shiny输入从表或查询中检索它们的值是很常见的。由于仪表板中的其他查询将使用所选输入进行相应过滤,因此传递给其他查询所需的值通常是标识代码,而不是下拉列表中显示的标签。要将键与值分开,可以使用包中的map()函数purrr。在下面的示例中,收集airlines表中的所有记录,并创建名称列表,map()然后将运营商代码插入每个名称节点。

    # This code runs in ui
    airline_list <- tbl(con, "airlines") %>%
      collect  %>%
      split(.$name) %>%    # Place here the field that will be used for the labels
      map(~.$carrier)      # Place here the field that will be used for keys
    在selectInput()下拉菜单能够读取所产生的airline_list列表变量。
    # This code runs in ui
     selectInput(
        inputId = "airline",
        label = "Airline:", 
        choices = airline_list) # Use airline_list as the choices argument value

    dplyr

    仪表板通常具有公共数据主题,该主题源自公共数据集。可以构建基本查询,因为dplyr转换为封面下的SQL,并且由于“懒惰”,在从其请求某些内容之前不会评估查询。

    db_flights <- tbl(con, "flights") %>%
      left_join(tbl(con, "airlines"), by = "carrier") %>%
      rename(airline = name) %>%
      left_join(tbl(con, "airports"), by = c("origin" = "faa")) %>%
      rename(origin_name = name) %>%
      select(-lat, -lon, -alt, -tz, -dst) %>%
      left_join(tbl(con, "airports"), by = c("dest" = "faa")) %>%
      rename(dest_name = name) 
    dplyr然后,该变量可用于多个Shiny输出。第二个例子是用于构建下highcharter图的代码。
    output$total_flights <- renderValueBox({
    
      result <- db_flights %>%           # Use the db_flights variable
        filter(carrier == input$airline)
      if(input$month != 99) result <- filter(result, month == input$month)
      
      result <- result %>%
        tally %>%
        pull %>%                        # Use pull to get the total count as a vector
        as.integer()
      
      valueBox(value = prettyNum(result, big.mark = ","),
               subtitle = "Number of Flights")
    })

    深入研究

    “向下钻取”操作的想法是最终用户能够看到构成仪表板中显示的聚合结果的部分或全部数据。“向下钻取”动作有两个部分:

    • 单击显示结果的仪表板元素。结果通常是汇总数据。
    • 将显示一个带有其他报告的新屏幕。新报告可能是另一个显示较低级别聚合的报告,也可能显示构成结果的行列表。

    单击仪表板元素

    以下是捕获点击事件的一种方法。我们的想法是在条形图中显示给定航空公司的顶级机场目的地。单击一个条形时,所需的结果是绘图激活向下钻取。该highcharter示例中将使用该程序包。
    要捕获条形单击事件highcharter,需要编写一个小的JavaScript。在大多数情况下,可以使用以下示例,因此您可以将其原样复制并粘贴到代码中。变量名称和输入名称(bar_clicked)将是唯一必须更改以匹配您的图表的两个语句。
    js_bar_clicked <- JS("function(event) {Shiny.onInputChange('bar_clicked', [event.point.category]);}")
    上面的命令在R中创建了一个新的JavaScript,可以跟踪单击一个栏的时间。以下是代码的细分:

    • JS - 表示以下函数是JavaScript
    • function(event) - 创建一个新函数,并期望一个event变量。Highchart将传递的事件是单击一个栏,因此event将包含有关该给定栏的信息。
    • Shiny.onInputChange - JavaScript将用于与Shiny交互的函数
    • bar_clicked - 是新Shiny输入的名称; 它的值将默认为下一个项目
    • [event.point.category] - 传递点击的点的类别值
      下一节将说明如何捕获新变化input$bar_clicked,并执行“向下钻取”的第二部分。
      在renderHighchart()输出函数中,包含JavaScript的变量作为事件列表的一部分传递:events = list(click = js_bar_clicked))。因为事件在hc_add_series()创建条形图的内部,所以这样的点击事件与单击条形图相关联。
    output$top_airports <- renderHighchart({
      # Reuse the dplyr db_flights variable as the base query
      result <- db_flights %>%
        filter(carrier == input$airline) 
      if(input$month != 99) result <- filter(result, month == input$month) 
      result <- result %>
        group_by(dest_name) %>%
        tally() %>%
        arrange(desc(n)) %>%                          
        collect %>%
        head(10)                                      
      highchart() %>%
        hc_add_series(
          data = result$n, 
          type = "bar",
          name = paste("No. of Flights"),
          events = list(click = js_bar_clicked)) %>%   # The JavaScript variable is called here
        hc_xAxis(
          categories = result$dest_name,               # Value in event.point.category
            tickmarkPlacement="on")})

    使用appendTab()

    计划是每次最终用户点击栏时显示新的向下钻取报告。为了防止不必要地拉出相同的数据,代码将足够智能,如果之前点击了相同的栏,则只需将焦点切换到现有选项卡。
    新的,非常酷的appendTab()函数用于动态创建一个新的Shiny选项卡,其中包含DataTable,其中包含选择的前100行。名为的简单向量tab_list用于跟踪所有现有详细信息选项卡。该updateTabsetPanel()功能用于切换到新创建或以前创建的选项卡。
    该observeEvent()函数是“捕获”JavaScript执行的事件的函数,因为它监视bar_clickedShiny输入。评论将添加到下面的代码中,以涵盖如何使用这些功能的更多方面。

    tab_list <- NULL
    
    observeEvent(input$bar_clicked,{  
           airport <- input$bar_clicked[1]              # Selects the first value sent in [event.point.category]
           tab_title <- paste(input$airline,            # tab_title is the tab's name and unique identifier
                              "-", airport ,            
                              if(input$month != 99)     
                                paste("-" , month.name[as.integer(input$month)]))
           
           if(tab_title %in% tab_list == FALSE){        # Checks to see if the title already exists
             details <- db_flights %>%                  # Reuses the db_flights dbplyr variable
               filter(dest_name == airport,             # Uses the [event.point.category] value for the filter
                      carrier == input$airline)         # Matches the current airline filter
             
             if(input$month != 99)                      # Matches the current month selection
                details <- filter(details, month == input$month) 
             details <- details %>%
               head(100) %>%                            # Select only the first 100 records
               collect()                                # Brings the 100 records into the R environment 
               
             appendTab(inputId = "tabs",                # Starts a new Shiny tab inside the tabsetPanel named "tabs"
                       tabPanel(
                         tab_title,                     # Sets the name & ID
                         DT::renderDataTable(details)   # Renders the DataTable with the 100 newly collected rows
                       ))
             tab_list <<- c(tab_list, tab_title)        # Adds the new tab to the list, important to use <<- 
             }
             
           # Switches over to a panel that matched the name in tab_title.  
           # Notice that this function sits outside the if statement because
           # it still needs to run to select a previously created tab
           updateTabsetPanel(session, "tabs", selected = tab_title)  
         })

    使用removeTab()和删除所有选项卡purrr

    动态创建新选项卡可能会使仪表板混乱。因此,actionLink()可以添加一个简单的按钮dashboardSidebar(),以删除除主仪表板选项卡以外的所有选项卡。

    # This code runs in ui
      dashboardSidebar(
           actionLink("remove", "Remove detail tabs"))

    observeEvent()再次使用该函数来捕获单击链接的时间。在walk()从命令purrr然后被用于通过在每个选项卡的标题迭代tab_list向量,并且前进到执行闪亮removeTab()每个名称命令。之后,重置选项卡列表变量。由于环境范围,确保<<-在重置变量时使用double小于(),因此它知道重置在函数外部定义的变量observeEvent()。

    展开全文
  • 环境 Mssql自带的http://Dapper.Net 批量插入 是一条条循环插入这里改成了单条 Ps:主要此方法要控制字符串长度哦,每个数据库对单条sql字符长度的限制是不一样的。 /// <summary> /// 批量插入 /// </...

    21a2d68922252343c74554834e4ed5ae.png

    环境 Mssql

    自带的http://Dapper.Net 批量插入 是一条条循环插入

    这里改成了单条 Ps:主要此方法要控制字符串长度哦,每个数据库对单条sql字符长度的限制是不一样的。

            /// <summary>
            ///     批量插入
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="entities"></param>
            /// <param name="exclude">排除的字段</param>
            public int BatchInsert<T>(List<T> entities, string[] exclude = null)
            {
                if (exclude == null || exclude.Length <= 0)
                    exclude = new[] {"Tid"};
    
                for (var i = 0; i < exclude.Length; i++)
                {
                    exclude[i] = exclude[i].ToLower();
                }
    
                if (entities != null && entities.Count > 0)
                {
                    var tbname = typeof(T).Name.TrimEnd("Entity".ToCharArray());
                    var colms = new List<string>();
                    var ps = entities.First().GetType().GetProperties().Where(p => !exclude.Contains(p.Name.ToLower()))
                        .ToList();
                    foreach (var p in ps)
                    {
                        colms.Add($"[{p.Name}]");
                    }
    
                    var paramList = new DynamicParameters();
                    var paramsNames = new List<string>();
    
    
                    var s = 0;
                    var n = "a";
                    foreach (var item in entities)
                    {
                        var toNames = new List<string>();
    
                        foreach (var p in ps)
                        {
                            var pname = $"@{n}{s}";
                            var pvalue = p.GetValue(item, null);
    
                            toNames.Add(pname);
                            paramList.Add(pname, pvalue);
                            s++;
                        }
    
                        paramsNames.Add($"({string.Join(",", toNames)})");
                    }
    
                    var sql =
                        $"INSERT INTO TB_{tbname} ({string.Join(",", colms)}) VALUES {string.Join(",", paramsNames)}";
                    return Connection.Execute(sql, paramList, _tran);
                }
    
                throw new Exception("传入参数先");
            }
    
    展开全文
  • 很多时候为了测试数据库设计是否恰当,优化SQL语句,需要在表中插入大量的数据,怎么插入大量的数据就是个问题了。 最开始想到的办法就是写一个程序通过一个很大的循环来不停的插入,比如这样: 1 2 3...
  • 1.新建数据表 我们知道最直接最简单的方法就是把该表的数据量变小,那么把表数据变少有什么办法呢?最简单最直接的方法就是再...如果在开始创表时分区就好多了,因为如果你想在插入很多数据以后的表中分区,这就复杂...
  • 第一步:用本身的SQLworkspace 从气温数据库中提取数据,然后将结果下载为 CSV 文件。我们有三个数据表,分别是:city_list - 这个表包含数据库中的城市和国家列表。city_data - 这个表包含每个城市每年的平均气温 ...
  • 公司有一个项目,需要频繁的插入数据到MySQL数据库中,设计目标要求能支持平均每秒插入1000条数据以上。目前功能已经实现,不过一做压力测试,发现数据库成为瓶颈,每秒仅能插入100多条数据,远远达不到设计目标。 ...
  • 我试图使用python(pymysql连接器)将一些数据插入到MySQL数据库中,但是性能非常差(大约每秒插入10行)。这个表是InnoDB,我使用了一个multiple values insert语句,并确保autocommit被关闭。你知道为什么我的插页这么...
  • 原因是MySQL 8.0一些设置是默认开启的(5.7是默认关闭的),而这些设置有可能会严重影响数据库性能。 本题中,影响插入效率的因素是,8.0默认开启了 log-bin 功能,在确定不用不到该功能的前提下,只要在配置中关闭...
  • 公司有一个项目,需要频繁的插入数据到MySQL数据库中,设计目标要求能支持平均每秒插入1000条数据以上。目前功能已经实现,不过一做压力测试,发现数据库成为瓶颈,每秒仅能插入100多条数据,远远达不到设计目标。 ...
  • 问题: 用mybatis批量插入近200条的数据大概用时5s!...数据库连接参数配置了rewriteBatchedStatements=true最终得以解决! 经过测试速度达到了毫秒级别, 100000条数据的情况下也控制在20s以下! ...
  • 数据库索引

    2020-05-11 18:17:37
    关于 MySQL 索引的好处,如果正确合理设计并且使用...做一个简单测试,假如我们创建了一个tb03表,向表中插入20000行数据,表的创建和数据插入用如下 脚本实现。 [root@www script]# cat mysql3.sh #!/bin/bash HOSTNAM
  • 数据库index

    2018-06-09 17:35:14
    Indexes(索引):索引可以使mysql快速的找到和检索一张包含百万甚至亿万数据的表中的一组纪录。如果你曾使用过mysql,不管是多久,你...有时候奇迹快速地工作,有时候却像是缓慢或者阻碍数据插入。在本章中,我们将...
  • 应用程序初始化时需要批量的向SQLite中插入大量数据,单独的使用for-insert方法导致应用响应缓慢,因为SQLite的数据库本质上来讲就是一个磁盘上的文件,所以一切的数据库操作其实都会转化为对文件的操作,而频繁的...
  • 数据库索引实验

    2018-03-29 19:53:23
    上周客户的系统有一个网页反应超级缓慢,最后帮客户定位到原因是sql慢查询,在这儿简单总结一下。当数据库中的数据量非常大的时候,数据库访问的速度会越来越慢,cpu和内存消耗变大,影响用户体验,可以通过创建索引...
  • Python批量插入Mysql加快时间1、插入速度缓慢自动提交手动提交2、插入系统时间对比Mysql时间Python时间 1、插入速度缓慢 批量数据的插入,建议不要一行行插入和提交,最好分批(一万行)提交一次。插入的目标表只有...
  • Android Sqlite数据库之使用事务

    千次阅读 2016-01-20 09:23:15
    一.概述首先给大家普及一下知识,什么是事务: 事务,一般是指要做的或所做的事情。...假如我们需要批量的向sqlite中插入大量数据,单独的使用for+Insert方法会导致应用响应缓慢,因为 sqlite插入数据的
  • 今天做一个gridview数据绑定是发现一个很奇怪的问题,同样的写法,在数据插入数据库后触发控件绑定的事件,但其中一个页面就出现数据显示数据缓慢问题,刚刚添加的数据记录并没用即时显示到gridview中,怀疑是存储...
  • 纵使操作简单,也有可能出现查找数据缓慢插入数据耗时等情况。本篇内容将介绍一些提高的数据库性能的规范实践,帮助大家更高效地使用数据库。2.1 避免频繁的开关DB我们一般会在每次增删改查中开关数据库,对于可能...
  • 数据插入缓慢 多表join查询效率低下 问题1:数据插入缓慢 现象是3000条数据插入要7分钟左右。 排查过程 查看数据分布情况 fb09_1=# select gp_segment_id, count(*) from db_xsys.t_xsys group by 1 order ...
  • 为了统计用户使用系统菜单的点击次数,将相应的日志信息存储到数据库中,但是一次一条的插入会导致存储速率缓慢,占用服务器及数据库资源等相关一系列的问题,所以为了避免这种情况,损耗了一定的实时性,将数据先...
  • 一般情况下,我们在向数据库插入数据时用Insert语句,但是当数据量很大的时候,这种情况就比较缓慢了,这个时候就需要SqlBulkCopy这个类。SqlBulkCopy本身常用的函数有这么几个DestinationTableName-----服务器...
  • 使用JDBC连接数据库时,如果插入的数据量大,一条一条地插入数据会变得非常缓慢。此时,我们需要用到预处理。 查阅Java开发文档,我们可以看到: 接口 PreparedStatement 表示预编译的 SQL 语句的对象。 SQL ...
  • 使用JDBC连接数据库时,如果插入的数据量大,一条一条地插入数据会变得非常缓慢。此时,我们需要用到预处理。查阅Java开发文档,我们可以看到:接口 PreparedStatement表示预编译的 SQL 语句的对象。SQL 语句被预...
  • 针对4.3版本的kettle作业插入数据缓慢,参考官网wiki :https://wiki.pentaho.com/display/EAI/MySQL 对“表输出"组件,进行修改: 点击数据库连接==> 编辑 ==>选项 设置如下参数,并保存。 测试性能 a.未...
  • 故障描述: 表bapbup.BUPMTRANADDINFO插入速度缓慢,该表为复合分区表,1级分区按日,二级分区按某字段值分区,定时每周日(9号为周日)凌晨00:30增加分区,对MAX分区做SPLIT。数据库定时每天4点开始收集统计信息

空空如也

空空如也

1 2 3 4 5 6
收藏数 111
精华内容 44
关键字:

数据库插入缓慢