mysql 数据库,表每天会插入30W条数据,该表数据千万级,查询效率很慢,建立索引是不是利大于弊?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 数据库,表每天会插入30W条数据,该表数据千万级,查询效率很慢,建立索引是不是利大于弊?相关的知识,希望对你有一定的参考价值。
呵呵,我认为可以建立索引,但必须要合理分配IO为什么:
1:索引是建立在表的一列或多个列上的辅助对象,目的是加快访问表中的数据(加快查询);
2:通常,通过索引查询数据比全表扫描要快. 当ORACLE找出执行查询和Update语句的最佳路径时, ORACLE优化器将使用索引. 除了那些LONG或LONG RAW数据类型, 你可以索引几乎所有的列. 在大型表中使用索引特别有效.
3:虽然使用索引能得到查询效率的提高,但是我们也必须注意到它的代价. 索引需要空间来 存储,也需要定期维护, 每当有记录在表中增减或索引列被修改时, 索引本身也会被修改. 这意味着每条记录的INSERT , DELETE , UPDATE将为此多付出4 , 5 次的磁盘I/O . 因为索引需要额外的存储空间和处理,那些不必要的索引反而会使查询反应时间变慢.
4:解决方案:
4.1利用分表操作。千万级的数据必须要用垂直分表操作,这样每天插入的数据在不同的表中,索引也就在不同的表的索引中,减少插入带来的效率问题
4.2 索引表空间和数据表空间分开存放。不要把索引和表数据建立在一个磁盘中,利用两个磁盘,分别进行IO操作,也就是索引表空间和数据表空间彻底分开。提高系统IO吞吐量。会有一定的效果,但不如第一个的效果好 参考技术A 如果经常查询肯定要建索引的。索引会占空间,硬盘够大的话。扩大就是了。追问
建立索引会影响插入效率吧?建立索引后每天30W的数据插入量效率大概会降低多少?
参考技术B 必须建立索引追问建立索引会影响插入效率吧?建立索引后每天30W的数据插入量效率大概会降低多少?
如何从 Eclipse 内部将 jsp 页面中的数据插入 mysql 数据库并在该表上运行查询?
【中文标题】如何从 Eclipse 内部将 jsp 页面中的数据插入 mysql 数据库并在该表上运行查询?【英文标题】:How to insert data from a jsp page into mysql database and run queries on that table , from inside Eclipse? 【发布时间】:2012-07-17 22:39:12 【问题描述】:我与mysql数据库有以下JDBC
连接:
import java.sql.*;
public class Main
public static void main (String[] args) throws ClassNotFoundException, SQLException
Class.forName("com.mysql.jdbc.Driver");
String string = "jdbc:mysql://localhost:3306/testdb";
Connection con = DriverManager.getConnection(string , "root2" , "root");
PreparedStatement statement = con.prepareStatement("select * from names"); // SELECT * FROM `names`
ResultSet result = statement.executeQuery();
while (result.next())
System.out.println(result.getString(1) + " " + result.getString(2));
当我进入http://localhost/phpmyadmin
并创建一个数据库时,我可以在我在那里创建的数据库上成功运行查询,但是我如何从Eclipse
(例如java)内部做到这一点?
为了更清楚,用户在jsp
页面中输入数据,我提取数据
从那里 。之后,我想从 Eclipse 内部创建一个数据库,而不是直接进入 http://localhost/phpmyadmin
。我怎样才能做到这一点 ?
编辑:
我有所需的 servlet,我现在想要的是从 servlet 创建数据库并从 servlet 运行查询。
谢谢
【问题讨论】:
在所有可能的情况下,最好避免在 JSP (Scriptlets) 中使用 java 代码。您可能需要考虑添加 servlet,然后将上面类中的代码复制到那里。 你想动态创建数据库吗? @thinksteep:我有一个 servlet,我的问题是如何从 servlet 创建数据库并使用 jdbc 运行它。 你试过了吗:executeQuery("create database mydatabase"); ?但是你为什么要这样做呢? 【参考方案1】:您的问题的完整答案需要大量的写作和很少的澄清。
有很好的教程可以使用: Creating Database Web Applications with Eclipse
您将使用 MySQL 而不是 Derby DB。
【讨论】:
以上是关于mysql 数据库,表每天会插入30W条数据,该表数据千万级,查询效率很慢,建立索引是不是利大于弊?的主要内容,如果未能解决你的问题,请参考以下文章