我有一个非常简单的表,有两列,但有4.5M行.
CREATE TABLE `content_link` (
`category_id` mediumint(8) unsigned NOT NULL,
`content_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`content_id`,`category_id`),
KEY `content_id` (`content_id`,`category_id`)
) ENGINE=MyISAM;
Run Code Online (Sandbox Code Playgroud)
当我运行一个简单的查询,如:
SELECT
*
FROM
content_link
WHERE
category_id = '11';
Run Code Online (Sandbox Code Playgroud)
mysql激活CPU并在返回大约10行之前需要2-5秒.数据在表中非常均匀地传播,我正在访问索引字段(我还分析/优化了表,我从不更改表的内容),那么查询需要这么长时间的原因是什么?
编辑:似乎navicat对我撒谎,我的主键实际上没有按正确的顺序键入,因为它正在向我显示表格.
我是荷兰的网页设计师.我从头开始构建Web应用程序,我总是使用CMS,并对其进行自定义.
我正在php/mysql中建立一个拍卖网站,已经完成了.最近我读了一些关于存储引擎的文章.
我有一些问题一直困扰着我一段时间:
什么样的存储引擎最适合我的网站,我使用myIsam,innodb等.
我正在建设的网站是一个拍卖网站,它必须处理几个读写每一个!它必须检查拍卖是开放,关闭,暂停,当前价格等.
我知道不是我的数据库中的所有表都会被访问,这些表只有3个.它们目前都是myIsam.这个好吗?我应该改变它们吗?没有改变?我真的不知道该怎么办.我是否会改变它们,这会对我的网站产生巨大影响.并且这些变化很容易适用,或者很难做到.
我的另一个问题是关于缓存系统.
我也读了一些关于它们但我不知道它们是否适用于我所拥有的那种网站.我从数据库中获取的数据发生了很大变化.缓存它们对我来说很方便吗?例如,可以缓存拍卖,因为并非所有项目都会更改.但拍卖会不会永远存在,经过几个小时它就不见了.
我无法看到缓存系统如何应用于此,或者我看到错误的方式.而且,如果这个系统适用于我,这种改变是否需要付出很多努力,而且这种努力会带来巨大的变化.
这些都是我的问题,我猜它们非常普遍,我希望有些人可以帮助我,我真的很感激.
问候
在尝试了我能做的一切之后,我终于创建了这个测试表:
CREATE TABLE test_table (
id int(11) NOT NULL AUTO_INCREMENT,
title text NOT NULL,
PRIMARY KEY (id),
FULLTEXT KEY title (title)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
Run Code Online (Sandbox Code Playgroud)
使用以下测试数据:
INSERT INTO test_table (id, title) VALUES
(1, 'Evolving intelligence bayesian filtering power behind');
Run Code Online (Sandbox Code Playgroud)
我希望以下查询返回1行:
SELECT * FROM test_table WHERE MATCH (title) AGAINST ('intelligence');
Run Code Online (Sandbox Code Playgroud)
但它返回一个空集.
我在同一个mysql实例中有另一个数据库,全文搜索按预期工作.但是对于我创建的每个新数据库,全文都不起作用.我重建了索引,修复了表,甚至用myisam_ftdump检查了索引.我没有想法.
你对这个问题有什么看法吗?先感谢您.
我正面临一个问题,我试图使用InnonDB引擎将数据从python脚本添加到mysql数据库,它可以与mysql数据库的myisam引擎一起使用.但myisam引擎的问题是它不支持外键,所以我必须在每个我想在数据库中插入/删除记录的位置添加额外的代码.
有谁知道为什么InnonDB不能使用python脚本和这个问题的可能解决方案?
我正致力于使用MySQL Server 5.1,Spring 3.0.5和Hibernate 3.6开发Web应用程序.我使用Springs Transaction Management.我是新手,所以如果我问一个容易回答的问题,请耐心等待.:-)
1)我读到了有关全局(xa)和本地事务的信息.是否正确,全局事务是指在不同资源(如不同数据库)上执行数据操作的事务.并且本地事务仅在一个资源(数据库)上执行数据操作.
2)是否可以与Hibernate进行全局事务?在Spring Reference Documentation中,我读到:"您也可以轻松使用Hibernate本地事务,如以下示例所示.在这种情况下,您需要定义一个Hibernate LocalSessionFactoryBean,您的应用程序代码将使用它来获取Hibernate Session实例. " 这就是为什么我认为Hibernate事务可能总是本地的,我没有找到任何关于它的东西.
3)为什么可以将MyISAM表与Hibernate一起使用?他们不支持交易,我认为Hibernate需要交易?我真的不明白这一点.起初我认为这是不可能的 - 但为什么可以用Hibernate创建MyISAM表并使用MyISAM方言呢?这是如何运作的???Hibernate是否需要交易或不需要交易?我想使用Hibernate你需要使用InnoDB.
谢谢回答!:-)
我在MySQL应用程序上的Python中遇到了一个非常奇怪的错误.以下代码位于多次调用的循环中.代码从未引发错误,但也从未插入任何数据:
cursor = db.cursor()
cursor.execute("""
INSERT INTO test_1 (value) VALUES (10000);
""")
Run Code Online (Sandbox Code Playgroud)
另一个奇怪的症状是,稍后使用phpMyAdmin将数据插入到同一个表中会产生非常大的auto_increment ID,因此即使表中没有实际数据,auto_increment计数器也会递增(无论如何,根据SELECT*FROM test_1).插件使用MySQL Workbench正常工作.
最后我随机发现使用桌面上的MyISAM引擎代替InnoDB修复它.为什么?
我正在使用 wpmudev.org 的插件将一个包含一个数据库和 81,000 多个表的 WordPress 站点分解为一个多数据库。主要动机是性能,我检查了表本身,它们是 MyISAM 类型。
我在想,在将表移动到新数据库时,我还可以将表类型更改为 InnoDB,这应该会提高站点性能。
将表从现有数据库迁移到新数据库的脚本使用以下语法:
创建表 .... LIKE .... 插入 .... SELECT * FROM ....
如果我可以在 CREATE TABLE 命令中覆盖引擎,我无法找到信息,例如:
创建表 .... LIKE .... ENGINE=InnoDB
另外我想知道“INSERT INTO .... SELECT * FROM ....”是否是插入数据的最有效方法...这是一个 php 脚本,所以我不介意添加一些代码来改进性能 - 在早期的试验中需要 3 天才能在 4 核 4GB RAM 上运行!
我在 Windows 7 上运行 MySQL 5.6(64 位)。我正在 32 位 Windows 7 上测试最近从 MySQL 5.0 升级的数据库。(我还复制了 my.ini,做了一些更改)
我发现建立连接需要很长时间(大约 1 秒)。作为示例,我创建了一个非常简单的 SQL 脚本:
select 1 as n;
Run Code Online (Sandbox Code Playgroud)
然后我在批处理文件中运行了 10 次,花了 10 秒才能完成:
mysql -h localhost -u root -D myschema 0< myscript.sql
Run Code Online (Sandbox Code Playgroud)
(是的,这里没有密码,这是一个仅监听127.0.0.1的测试DB)
有人知道为什么这么慢吗?(参见下面的 my.ini)
[client]
port=3306
[mysql]
default-character-set=latin1
[mysqld]
port=3306
bind-address=127.0.0.1
basedir="C:/Program Files/MySQL/mysql-5.6.10-winx64/"
datadir=C:/DATA
character-set-server=latin1
default-storage-engine=myisam
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
max_connections=100
query_cache_size=0
table_open_cache=256
tmp_table_size=18M
thread_cache_size=8
myisam_max_sort_file_size=100G
myisam_sort_buffer_size=35M
key_buffer_size=25M
read_buffer_size=64K
read_rnd_buffer_size=256K
sort_buffer_size=256K
innodb_additional_mem_pool_size=2M
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=1M
innodb_buffer_pool_size=47M
innodb_log_file_size=24M
innodb_thread_concurrency=8
log-bin=c:/data/mysql/binarylog
max_binlog_size=1024M
enable-named-pipe
slow_query_log=
expire_logs_days=90
Run Code Online (Sandbox Code Playgroud) 我们的网站每天有数百名访问者,每天有数万个查询.因此,数据库中的一些表很少更新,一些表每分钟更新几次,一些表更新〜每秒10次.
MyISAM使用表级锁定进行更新,InnoDb使用行级锁定.
因此,据我所知,对于频繁并发更新的表(每秒多次更新),最好将它们设为InnoDb,对于其他表(如果我们当然不需要事务和外键),可以使用MyISAM引擎.
我的想法是对的吗?
我正在使用MySQL表,我需要为每行增加一列中的值,其中超过6.5米.
col类型是varchar并且可以包含整数或字符串(即+1).表类型是MyISAM.
我用PHP尝试过这个:
$adjust_by = 1;
foreach ($options as $option) {
$original_turnaround = $option['turnaround'];
$adjusted_turnaround = $option['turnaround'];
if (preg_match('/\+/i', $original_turnaround)) {
$tmp = intval($original_turnaround);
$tmp += $adjust_by;
$adjusted_turnaround = '+'.$tmp;
} else {
$adjusted_turnaround += $adjust_by;
}
if (!array_key_exists($option['optionid'], $adjusted)) {
$adjusted[$option['optionid']] = array();
}
$adjusted[$option['optionid']][] = array(
'original_turn' => $original_turnaround,
'adjusted_turn' => $adjusted_turnaround
);
}//end fe options
//update turnarounds:
if (!empty($adjusted)) {
foreach ($adjusted as $opt_id => $turnarounds) {
foreach ($turnarounds as $turn) …Run Code Online (Sandbox Code Playgroud)