Questions tagged «mysql»

MySQL的所有版本(不是Microsoft SQL Server)。如果与此问题相关,还请添加特定于版本的标记,例如mysql-5.7。


3
为什么不分区?
什么时候不希望对数据库进行分区?(考虑MySQL分区) 就我而言 我将从几百万行开始,应该从那里开始。 字符字段上的主键用作最频繁的查询约束(并且查找也很频繁-至少每秒几次)。 主键将被散列为分区键 将对上述频繁查询中提取的每一行进行更新 频率较低的查询(针对日期列或其他查询)将需要访问所有分区 即使到最后一点,查找也不是并行运行的,因此在所有情况下,这都是胜利吗?分区的不利之处是什么?为什么至少在查看百万条记录时,每个人都默认不使用它? 更新-我选择了zgguy的答案,但请注意,我在自己的研究结果中添加了自己的答案,其中包括指向对我非常有用的类似问题的非常好的答案的链接。

1
MySqlDump的DISABLE KEYS对导入无效
我对我之前关于Inno-Tables的导入速度的问题有一个后续问题(惊奇!)。 方案 我尝试在合理的时间内在本地开发计算机上导入一些big *数据库转储。我们KEY在表上附加了许多s,这些表原来是瓶颈,但对于我们的实时系统仍然很重要。 在问完上述问题后,我的方法是KEY ...从转储,导入和重新添加键中删除语句。 但是,我经常发现自己正在编辑当前的转储以将其导入本地,并且偶然发现了这些有趣的“注释”(- disable/enable keys行) -- -- Dumping data for table `monster` -- LOCK TABLES `monster` WRITE; /*!40000 ALTER TABLE `monster` DISABLE KEYS */; INSERT … INSERT … INSERT /*!40000 ALTER TABLE `monster` ENABLE KEYS */; UNLOCK TABLES; 但实际上,这些“注释”是有条件的MySql语句 这对我来说是个新闻,但好的,鉴于输出形式mysql --version对我来说一切正常: mysql Ver 14.14 Distrib 5.5.38, …

2
MySQL:左外部联接和内部联接之间哪个联接更好
如果所有连接都提供相同的结果,哪个连接比较好执行?例如,我有两个表employees(emp_id,name, address, designation, age, sex)和work_log(emp_id,date,hours_wored)。为了得到一些特定的结果,inner join并left join给出相同的结果。但是,我还有一些疑问,不仅限于这个问题。 在结果值相同的情况下,哪个连接更有效? 申请加入时还必须考虑哪些其他因素? 内部联接和交叉联接之​​间有什么关系吗?

3
InnoDB导入性能
我在批量导入一个由大约1000万行(或7GB)组成的相当大的InnoDB表时遇到了麻烦(对我来说,这是迄今为止我使用过的最大表)。 我做了一些研究来提高Inno的导入速度,目前我的设置如下所示: /etc/mysql/my.cnf/ [...] innodb_buffer_pool_size = 7446915072 # ~90% of memory innodb_read_io_threads = 64 innodb_write_io_threads = 64 innodb_io_capacity = 5000 innodb_thread_concurrency=0 innodb_doublewrite = 0 innodb_log_file_size = 1G log-bin = "" innodb_autoinc_lock_mode = 2 innodb_flush_method = O_DIRECT innodb_flush_log_at_trx_commit=2 innodb_buffer_pool_instances=8 import is done via bash script, here is the mysql code: SET …

1
在表上创建MySQL索引失败
更新:tl; dr:问题是MySQL TMPDIR在创建索引时使用。而我TMPDIR的磁盘空间不足。 原始问: 我正在尝试向InnoDB表添加索引,并获得一个table is full error。我有足够的磁盘空间,MySQL配置的文件表数量为1。表数据为85GB,我假设索引约为20GB-30GB,并且我的磁盘空间要大得多。我也在使用ext3,因此从操作系统的角度来看,文件大小限制没有任何问题。 记录的错误如下所示: 140616 13:04:33 InnoDB: Error: Write to file (merge) failed at offset 3 1940914176. InnoDB: 1048576 bytes should have been written, only 970752 were written. InnoDB: Operating system error number 0. InnoDB: Check that your OS and file system support files of …
10 mysql  innodb  index 


1
定期定期高效删除大量(400万行)mysql数据
我们有一个mysql表,该表在任何给定时间都有大约1200万行。我们需要删除旧数据,以使表的大小易于管理。 现在,我们每天在午夜使用cron作业运行此查询: DELETE FROM table WHERE endTime < '1393632001' 上一次运行查询时,它检查了4,602,400,耗时3分钟,CPU瘫痪。 在仍然清除旧数据的同时,如何使CPU,同步数据库连接,磁盘提示深度等不会出现不合理的变化? PS:您会注意到,查询实际上是在使用周期中的不适当时间进行的。假设我们已经将查询的时间更改为每天使用的最低点。另外,“ endTime”上没有索引,如果可能的话,我宁愿保持这种方式,因为有很多数据被非常定期地插入,并且查找不多。
10 php  mysql 

2
我删除了MySQL的“ performance_schema”数据库,如何创建它?
在解决ibdata / log问题时,我不小心删除了performance_schema数据库,我想创建一个新数据库。 mysql> SHOW VARIABLES LIKE 'perf%'; +---------------------------------------------------+---------+ | Variable_name | Value | +---------------------------------------------------+---------+ | performance_schema | ON | | performance_schema_events_waits_history_long_size | 10000 | | performance_schema_events_waits_history_size | 10 | | performance_schema_max_cond_classes | 80 | | performance_schema_max_cond_instances | 1000 | | performance_schema_max_file_classes | 50 | | performance_schema_max_file_handles | 32768 | …
10 mysql 

2
mysqladmin没有采取内联密码
我正在尝试设置一个cron作业,以便从从机上进行备份。所以我要停止奴隶 我发出命令 mysqladmin --user=root --password=test_pass stop-slave 但这会引发错误: mysqladmin:在“ localhost”处连接到服务器失败错误:“对用户“ root” @“ localhost”的访问被拒绝(使用密码:是) 现在我尝试使用命令 mysqladmin --user=root --password stop-slave 它提示输入密码,我给了as test_pass,一切都很好。 为什么会这样呢?有什么选择? 注意:顺便说一句,我的mysql版本是mysql-5.0.95-5,这有意义。

1
将Select语句放入事务中
这两个查询之间有什么区别: START TRANSACTION; SELECT * FROM orders WHERE id=1; UPDATE orders SET username='John' WHERE id=1; COMMIT; 而且没有交易: SELECT * FROM orders WHERE id=1; UPDATE orders SET username='John' WHERE id=1; 进行SELECT内部交易有什么影响? 如果在这两种情况DELETE FROM orders WHERE id=1之后都SELECT在另一个会话中被调用,它将在何时进行处理?

3
两个可为空的列,其中一个必须具有值
不解释问题: 无论如何,是否有2个空值的约束总是需要1个有值?例如,两个日期列都为空,但至少有 1个需要具有一个值 问题描述: 假设我有一个名为Expense的表格 并有两个日期: prevision_expense_expiration_date DATE为空ABLEABLE_payment_date DATE为空 这两列的逻辑如下: 我买了东西,我知道我得为此花些钱,例如电话费。我将其作为费用输入,并带有expense_payment_date。该日期是我应该支付的假定日期,而不是实际的支付日期,例如发票的到期日期。 在其他情况下,我会出售某些提供者提供的服务的礼品卡。我可能有买我的提供商的服务转移到我的客户的费用只有当客户赎回卡。因此,礼品卡有一个有效期,我想对该“费用”做一个预先准备,而不插入礼品卡有效期内的费用,如果礼品卡过期,则“费用”不应输入到帐户中系统。 我知道我可以有2个相等的表,分别称为prevision_expense和Confirmed_expense,但是听起来不对,所以我在同一张表中有2个日期,可以为空,但是我想约束一下,以便始终需要一个。 还有另一种可行的策略: payment_date DATE NOT NULL is_prevision_date BOOL NOT NULL 因此,在这种情况下,如果日期为prevision,则bool值将为1,否则将为0。没有空值,一切都很好。除了我希望可以选择在第一次有预先设定日期时存储两个值,然后(然后说两天后说)确定该费用的日期时,在这种情况下,采用策略2时,我将没有该选项。 我在数据库设计中做错了什么吗?:D


4
如何处理大型未记录数据库
最近,我被某公司X聘为唯一的IT专家,我的任务是修复他们的应用程序,我认为,最好的开始方法是了解数据库。 他们当前的数据库是带有186个表的MySQL数据库(请注意,有些表是空的,上帝知道原因)。应用程序正在通过MS Access数据库接口与数据库进行通信。(我问自己为什么开发商也这样做) 问题是,如何开始处理这个大型的未公开文档的数据库?是的,它没有记录,因为应用程序的开发人员不愿意给我ERD或数据字典或有关数据库的任何信息来简化我的生活。您如何建议您进行这项艰巨的工作,即了解相当大的数据库的每个细节? 相关问题:如何进入一个丑陋的数据库?

1
不为每个表从统一查询中计算MATCH()AGAINST()分数
我正在尝试对SELECT语句的整个部分进行评分 SELECT *,MATCH(`result`) AGAINST('keyword') as `score` FROM `table1` WHERE MATCH(`result`) AGAINST('keyword') UNION SELECT *,MATCH(`content`) AGAINST('keyword') as `score` FROM `table2` WHERE MATCH(`content`) AGAINST('keyword') UNION SELECT *,MATCH(`text`) AGAINST('keyword') as `score` FROM `table3` WHERE MATCH(`text`) AGAINST('keyword') 在这种情况下,分数是每张桌子的分数+它们不是按相关性排序的 但是我尝试了这种方法,这种方法虽然有效,但不值得生产 SELECT * FROM ( SELECT *,MATCH(`result`) AGAINST('keyword') as `score` FROM `table1` WHERE MATCH(`result`) AGAINST('keyword') UNION …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.